elasticsearch同义词配置,楼主亲测
1安装jdk(版本要求较高);
2装elasticsearch;
3安装head插件;
4安装IK插件:
(前面2~4步可以省略,通过直接解压elasticsearch.rar文件代替这三个步骤)。
5.配置同义词:
同义词组件已经是elasticsearch自带的了,所以不需要额外安装插件,但是想要让同义词和IK一起使用,就需要配置自己的分析器了。
配置步骤如下:
打开config/elasticsearch.yml文件,在文件的尾部加上以下配置:
index:
analysis:
analyzer:
ik_syno:
type: custom
tokenizer: ik_max_word
filter: [my_synonym_filter]
ik_syno_smart:
type: custom
tokenizer: ik_smart
filter: [my_synonym_filter]
filter:
my_synonym_filter:
type: synonym
synonyms_path: analysis/synonym.txt
以上配置定义了ik_syno和ik_syno_smart两个新的analyzer,分别对应ik分词器的ik_max_word和ik_smart两种分词方式。ik_syno和ik_syno_smart都应用了新定义的过滤器my_synonym_filter实现同义词转换。
6.配置完成以后,在config目录下创建analysis/synonym.txt文件:
创建synonym.txt文件完成后,在文件中输入一些自定义的同义词,并按UTF-8的格式保存。(如:西红柿,番茄;苹果,手机配件;正文,汉语)。
7.重启elasticsearch;
8.访问本地的地址(http://localhost:9200/_plugin/oob):
(1)登录后,点击head
(2)创建索引,并设置应用的分词策略,具体代码如下:
PUT http://localhost:9200/neusoft
{
"mappings": {
"goods": {
"properties": {
"title": {
"index": "analyzed",
"type": "string",
"term_vector": "with_positions_offsets",
"analyzer": "ik",
"search_analyzer": "ik_syno"
}
}
}
}
}
以上代码设置了search_analyzer的分词器是我们之前自定义的ik_syno,这样同义词搜索功能就实现了。需要注意的是,索引名需要是英文字母小写,不可以添加下划线等。
(3)向索引中添加数据:
插入数据语句如下:
PUT http://localhsot:9200/neusoft/goods/1
{"title":"苹果"}
PUT http://localhsot:9200/neusoft/goods/2
{"title":"手机配件"}
以上数字1,2是数据的ID。
(4)查询:
数据插入完成后,就可以验证同义词搜索功能:
POST http://localhost:9200/neusoft/goods/_search
{
"query": {
"match": {
"title": "苹果"
}
}
}
这样就会将"苹果"和"手机配件"都查询出来了。