前言

这是一个elasticsearch的中文分词插件,基于ansj,感谢群内热心的朋友。 并宣传一下我们的群QQ211682609

版本对应

plugin elasticsearch
1.0.0 0.90.2
1.x 1.x
2.1.1 2.1.1
2.3.1 2.3.1
2.3.2 2.3.2
2.3.3 2.3.3
2.3.4 2.3.4
2.3.5 2.3.5
2.4.0 2.4.0
2.4.1 2.4.1
2.4.2 2.4.2
2.4.3 2.4.3
2.4.4 2.4.4
2.4.5 2.4.5
5.0.0 5.0.0
5.0.1 5.0.1
5.0.2 5.0.2
5.1.1 5.1.1
5.1.2 5.1.2
5.2.0 5.2.0
5.2.1 5.2.1
5.2.2 5.2.2
5.3.0 5.3.0
5.3.1 5.3.1
master 5.3.2

5.3.2 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.3.2/elasticsearch-analysis-ansj-5.3.2.0-release.zip

5.3.1 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.3.1/elasticsearch-analysis-ansj-5.3.1.0-release.zip

5.3.0 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.3.0/elasticsearch-analysis-ansj-5.3.0.0-release.zip

5.2.2 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.2.2/elasticsearch-analysis-ansj-5.2.2.0-release.zip

5.2.1 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.2.1/elasticsearch-analysis-ansj-5.2.1.0-release.zip

5.2.0 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.2.0/elasticsearch-analysis-ansj-5.2.0.0-release.zip

5.1.2 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.1.2/elasticsearch-analysis-ansj-5.1.2.0-release.zip

5.1.1 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.1.1/elasticsearch-analysis-ansj-5.1.1.0-release.zip

5.0.2 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.0.2/elasticsearch-analysis-ansj-5.0.2.0-release.zip

5.0.1 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.0.1/elasticsearch-analysis-ansj-5.0.1.1-release.zip

5.0.0 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v5.0.0/elasticsearch-analysis-ansj-5.0.0.0-release.zip

2.4.5 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v2.4.5/elasticsearch-analysis-ansj-2.4.5.0-release.zip

2.4.4 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v2.4.4/elasticsearch-analysis-ansj-2.4.4.0-release.zip

2.4.3 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v2.4.3/elasticsearch-analysis-ansj-2.4.3.0-release.zip

2.4.2 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v2.4.2/elasticsearch-analysis-ansj-2.4.2.0-release.zip

2.4.1 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install https://github.com/NLPchina/elasticsearch-analysis-ansj/releases/download/v2.4.1/elasticsearch-analysis-ansj-2.4.1.0-release.zip

2.4.0 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/2.4.0.3/elasticsearch-analysis-ansj-2.4.0.3-release.zip

2.3.5 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/2.3.5.3/elasticsearch-analysis-ansj-2.3.5.3-release.zip

2.3.4 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/2.3.4/elasticsearch-analysis-ansj-2.3.4-release.zip

2.3.3 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/2.3.3.3/elasticsearch-analysis-ansj-2.3.3.3-release.zip

2.3.2 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/2.3.2.1/elasticsearch-analysis-ansj-2.3.2.1-release.zip

2.3.1 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/2.3.1/elasticsearch-analysis-ansj-2.3.1-release.zip

2.1.1 插件安装

进入Elasticsearch目录运行如下命令

进入es目录执行如下命令

./bin/plugin install http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/2.1.1/elasticsearch-analysis-ansj-2.1.1-release.zip

1.x 插件安装

进入Elasticsearch目录运行如下命令

./bin/plugin -u http://maven.nlpcn.org/org/ansj/elasticsearch-analysis-ansj/1.x.1/elasticsearch-analysis-ansj-1.x.1-release.zip -i ansj

==========

2017年4月9日

  • ansj_seg升级至5.1.1
  • 支持配置同义词词典
  • 支持自定义分词器
  • 支持从http,文件,数据库,jar,class加载词典
  • 热词更新,用http接口取代redis

2016年11月11日

  • elasticsearch更新至5.0.0
  • ansj_seg升级至5.0.4
  • 新增配置文件config/ansj.cfg.yml

2016年04月16日

  • elasticsearch更新2.3.1
  • ansj_seg升级至3.7.3

1770年01月01日

  • elasticsearch更新2.1.1
  • ansj_seg升级至3.5
  • 新增http的_ansj接口,用于查看ansj分词词性
  • 新增http的_cat/ansj接口,作用同上,显示为cat方式
  • 新增http的_cat/[index]/analyze接口,和_analyze作用一样,显示为cat方式
  • 更方便的配置

先来点配置好的示例 ^ ^ 别吐槽我的格式化 (顺便求一个判断字符串中含有几个中文的方法)

测试

  • 创建测试索引
curl -XPUT 127.0.0.1:9200/test -d '{
    "settings" : {
        "number_of_shards" : 1,
        "number_of_replicas" : 0

    },
    "mappings" : {
        "test" : {
            "_all" : { "enabled" : false },
            "properties" : {
                "name" : { "type" : "string", "analyzer" : "index_ansj", "search_analyzer" : "query_ansj" }
            }
        }
    }
}'
  • 添加索引内容
curl -XPUT 'http://127.0.0.1:9200/test/test/1' -d '{
    "name" : "**人民**",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'
  • 查询索引
浏览器访问:
http://127.0.0.1:9200/test/test/_search?q=name:%E4%B8%AD%E5%9B%BD
  • 如果你想把ansj作为你的默认分词需要在elasticsearch.yml加入如下配置:
#默认分词器,索引
index.analysis.analyzer.default.type: index_ansj

#默认分词器,查询

index.analysis.analyzer.default_search.type: query_ansj

关于分词器不得不说的那点小事

目前默认内置三个分词器

当然如果你有心仔细观察日志看到了实例化了n多分词器如下

 regedit analyzer named : index_ansj
 regedit analyzer named : query_ansj
 regedit analyzer named : to_ansj
 regedit analyzer named : dic_ansj
 regedit analyzer named : user_ansj
 regedit analyzer named : search_ansj

why????
额 只有三个其他都是别名

索引分词

index_ansj 是索引分词,尽可能分词处所有结果 example

http://127.0.0.1:9200/_cat/test/analyze?text=%E5%85%AD%E5%91%B3%E5%9C%B0%E9%BB%84%E4%B8%B8%E8%BD%AF%E8%83%B6%E5%9B%8A&analyzer=index_ansj

六味  		0		2		0		word		
地   		2		3		1		word		
黄丸软 		3		6		2		word		
胶囊  		6		8		3		word		
六味地黄		0		4		4		word		
地黄  		2		4		5		word		
地黄丸 		2		5		6		word		
软胶  		5		7		7		word		
软胶囊 		5		8		8		word			

搜索分词 (search_ansj=to_ansj=query_ansj)

query_ansj 是搜索分词,是索引分词的子集,保证了准确率 example

http://127.0.0.1:9200/_cat/test/analyze?text=%E5%85%AD%E5%91%B3%E5%9C%B0%E9%BB%84%E4%B8%B8%E8%BD%AF%E8%83%B6%E5%9B%8A&analyzer=query_ansj

六味 		0		2		0		word		
地  			2		3		1		word		
黄丸软		3		6		2		word		
胶囊 		6		8		3		word		

用户自定义词典优先的分词方式 (user_ansj=dic_ansj)

dic_ansj 是用户自定义词典优先策略

http://127.0.0.1:9200/_cat/test/analyze?text=%E5%85%AD%E5%91%B3%E5%9C%B0%E9%BB%84%E4%B8%B8%E8%BD%AF%E8%83%B6%E5%9B%8A&analyzer=dic_ansj

六味地黄		0		4		0		word		
丸   		4		5		1		word		
软胶囊 		5		8		2		word		

编译安装

  • 第一步,你要有一个elasticsearch的服务器(废话) 版本2.1.1

  • 第二步,把代码clone到本地

  • 第三步,mvn clean install

  • 第四步,进入$Project_Home/target/releases 目录,

  • 第五步,拷贝$Project_Home/target/releases/目录下的zip包到解压到$ES_HOME/plugins目录下

现在,你的es集群已经有下面三个名字的analyzer

  • index_ansj (建议索引使用)
  • query_ansj (建议搜索使用)
  • dic_ansj

三个名字的tokenizer

  • index_ansj (建议索引使用)
  • query_ansj (建议搜索使用)
  • dic_ansj

分词文件配置:

2.4.2或5.2.0以上:

  • 配置文件config/ansj.cfg.yml,需要放入$ES_HOME/config/analysis-ansj/ansj.cfg.yml或者$ES_HOME/plugins/elasticsearch-analysis-ansj-*/config/ansj.cfg.yml
# 全局变量配置方式一
ansj:
  #默认参数配置
  isNameRecognition: true #开启姓名识别
  isNumRecognition: true #开启数字识别
  isQuantifierRecognition: true #是否数字和量词合并
  isRealName: false; #是否保留真实词语,建议保留false

  #用户自定词典配置
  dic: default.dic #也可以写成 file//default.dic , 如果未配置dic,则此词典默认加载
  # http方式加载
  #dic_d1: http://xxx/xx.dic
  # jar中文件加载
  #dic_d2: jar://org.ansj.dic.DicReader|/dic2.dic
  # 从数据库中加载
  #dic_d3: jdbc:mysql://xxxx:3306/ttt?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull|username|password|select name as name,nature,freq from dic where type=1
  # 从自定义类中加载,YourClas  extends PathToStream
  #dic_d3: class://xxx.xxx.YourClas|ohterparam

  #过滤词典配置
  #stop: http,file,jar,class,jdbc 都支持
  #stop_key1: ...

  #歧义词典配置
  #ambiguity: http,file,jar,class,jdbc 都支持
  #ambiguity_key1: ...

  #同义词词典配置
  #synonyms: http,file,jar,class,jdbc 都支持
  #synonyms_key1: ...

# 全局变量配置方式二 通过配置文件的方式配置,优先级高于es本身的配置
ansj_config: ansj_library.properties # http,file,jar,class,jdbc 都支持,格式参见ansj_library.properties
  • 配置自定义分词器
# 配置自定义分词器
index:
  analysis:
    tokenizer :
      my_dic :
        # 类型支持base_ansj, index_ansj, query_ansj, dic_ansj, nlp_ansj
        type : dic_ansj   
        dic: dic
        stop: stop
        ambiguity: ambiguity
        synonyms: synonyms
        isNameRecognition: true
        isNumRecognition: true
        isQuantifierRecognition: true
        isRealName: false

    analyzer:
      my_dic:
        type: custom
        tokenizer: my_dic
  • http接口
    • /_cat/ansj: 执行分词
    • /_cat/ansj/config: 显示全部配置
    • /_ansj/flush/config: 刷新全部配置
    • /_ansj/flush/dic: 更新全部词典。包括用户自定义词典,停用词典,同义词典,歧义词典,crf

2.4.2或5.2.0以下:

在这里我说一下,在插件里我写了一些默认配置,如果你也可以接受我的默认配置,关于ansj就完全不用配置了,或者只修改你需要的配置。下面的代码目录都是相对es的config目录,有几点需要注意一下:

  • ansj的核心词典是和插件一起安装的在插件目录下面
  • 由于使用redis的pubsub功能,需要相关权限控制,安装的时候必须获得允许,而2.3.3.2以前的版本需要加./elasticsearch -Des.security.manager.enabled=false参数才能解决
  • 请慎重使用redis的pubsub功能
  • 5.0.0版本新增配置文件config/ansj.cfg.yml,需要放入$ES_HOME/config/elasticsearch-analysis-ansj/ansj.cfg.yml或者$ES_HOME/plugins/elasticsearch-analysis-ansj-*/config/ansj.cfg.yml
## ansj配置
ansj:
 dic_path: "ansj/dic/user/" ##用户词典位置
 ambiguity_path: "ansj/dic/ambiguity.dic" ##歧义词典
 enable_name_recognition: true ##人名识别
 enable_num_recognition: true ##数字识别
 enable_quantifier_recognition: false ##量词识别
 enabled_stop_filter: true ##是否基于词典过滤
 enable_skip_user_define: false ## 是否用户词典不加载相同的词
 stop_path: "ansj/dic/stopLibrary.dic" ##停止过滤词典
## redis 不是必需的
 redis:
  pool:
   maxactive: 20
   maxidle: 10
   maxwait: 100
   testonborrow: true
  ip: 10.0.85.51:6379
  timeout: 2000
  #password: "******" ## 不要添加这个配置,除非redis需要权限认证
  channel: ansj_term ## publish时的channel名称
  write:
    dic: "ext.dic" ## 如果有使用redis的pubsub方式更新词典。如果没有配置,默认使用的是$ES_HOME/config/ansj/dic/user/ext.dic
  • 查询分词

可以使用开头我提供的http接口来查看分词效果

然后通过redis发布一个新词看看 追加新词

redis-cli
publish ansj_term u:c:视康

是不是分词发生了变化 删除词条

redis-cli
publish ansj_term u:d:视康

又回来了

然后通过redis发布一个歧义词 追加歧义词

redis-cli
publish ansj_term a:c:减肥瘦身-减肥,nr,瘦身,v

是不是分词发生了变化 删除歧义词

redis-cli
publish ansj_term a:d:减肥瘦身

又回来了

结束

就写这么多吧,有啥问题,QQ找我