elasticsearch 使用同义词
使用环境
elasticsearch5.1.1
kibana5.1.1
同义词插件5.1.1
安装插件
下载对应的elasticsearch-analysis-dynamic-synonym-5.1.1.zip, 解压到本地的elasticsearch/plugins目录下, 重新启动es
第一种方式本地文件
说明:
对于本地文件:主要通过文件的修改时间戳(Modify time)来判断是否要重新加载
在elasticsearch/config目录下,建立analysis目录, 并在analysis目录下放入synonym.txt, 在文件首行加入下面一行同义词,来进行测试
西红柿, 番茄, 圣女
es设置索引和自定义解析器
PUT /megacorp
{
"mappings": {
"employee": {
"properties": {
"name":{
"type": "text",
"analyzer": "ik-index", //指定索引时候用的解析器
"search_analyzer": "ik-smart" //指定搜索时候用的解析器
}
}
}
}
,
"settings": {
"analysis": {
"filter": {
"local_synonym" : {
"type" : "dynamic_synonym",
"synonyms_path" : "analysis/synonym.txt"
}
},
"analyzer": {
"ik-index": {
"type": "custom",
"tokenizer": "ik_max_word",
"filter": [
"local_synonym" //对同义词进行了过滤
]
},
"ik-smart": {
"type": "custom",
"tokenizer": "ik_smart",
"filter": [
"local_synonym"
]
}
}
}
}
}
设置好后,可以用以下命令查看,同义词是否配置成功
GET /megacorp/_analyze
{
"analyzer": "ik-index",
"text": "西红柿"
}
正确分词结果如下:
{
"tokens": [
{
"token": "西红柿",
"start_offset": 0,
"end_offset": 3,
"type": "CN_WORD",
"position": 0
},
{
"token": "番茄",
"start_offset": 0,
"end_offset": 3,
"type": "SYNONYM",
"position": 0
},
{
"token": "圣女",
"start_offset": 0,
"end_offset": 3,
"type": "SYNONYM",
"position": 0
}
]
}
插入2条数据:
PUT /megacorp/employee/1
{
"name" : "圣女果"
}
PUT /megacorp/employee/2
{
"name" : "番茄"
}
搜索西红柿, 会搜索出番茄和圣女果的记录:
GET /megacorp/employee/_search
{
"query":{
"match": {
"name": "西红柿"
}
}
}
第二种方式远程接口
说明:
这个http请求需要返回两个头部,一个是 Last-Modified,一个是 ETag,只要有一个发生变化,该插件就会去获取新的同义词来更新相应的同义词。