package org.elasticsearch.index.analysis;

import com.huaban.analysis.jieba.JiebaSegmenter;
import com.huaban.analysis.jieba.WordDictionary;
import org.apache.lucene.analysis.Analyzer;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.env.Environment;
import org.elasticsearch.index.IndexSettings;

/**
 * Created by zhangcheng on 2017/1/17.
 */
public class JiebaAnalyzerProvider extends AbstractIndexAnalyzerProvider<JiebaAnalyzer> {

  private JiebaAnalyzer jiebaAnalyzer;

  public JiebaAnalyzerProvider(IndexSettings indexSettings,
                              Environment environment,
                              String name,
                              Settings settings,
                              JiebaSegmenter.SegMode mode) {
    super(indexSettings, name, settings);
    if (null != mode) {
      jiebaAnalyzer = new JiebaAnalyzer(mode.name());
    } else {
      jiebaAnalyzer = new JiebaAnalyzer(settings.get("segMode", JiebaSegmenter.SegMode.SEARCH.name()));
    }

    JiebaDict.init(environment);
  }

  @Override
  public JiebaAnalyzer get() {
    return jiebaAnalyzer;
  }

  public static AnalyzerProvider<? extends Analyzer> getJiebaSearchAnalyzerProvider(IndexSettings indexSettings,
                                                                                    Environment environment,
                                                                                    String s,
                                                                                    Settings settings) {
    JiebaAnalyzerProvider jiebaAnalyzerProvider = new JiebaAnalyzerProvider(indexSettings,
        environment,
        s,
        settings,
        JiebaSegmenter.SegMode.SEARCH);

    return jiebaAnalyzerProvider;
  }

  public static AnalyzerProvider<? extends Analyzer> getJiebaIndexAnalyzerProvider(IndexSettings indexSettings,
                                                                                  Environment environment,
                                                                                  String s,
                                                                                  Settings settings) {
    JiebaAnalyzerProvider jiebaAnalyzerProvider = new JiebaAnalyzerProvider(indexSettings,
        environment,
        s,
        settings,
        JiebaSegmenter.SegMode.INDEX);

    return jiebaAnalyzerProvider;
  }
}