博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
elasticsearch 使用同义词
阅读量:4570 次
发布时间:2019-06-08

本文共 3366 字,大约阅读时间需要 11 分钟。

elasticsearch 使用同义词

使用环境

  • elasticsearch5.1.1

  • kibana5.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,只要有一个发生变化,该插件就会去获取新的同义词来更新相应的同义词。

本地写个接口

http://localhost/synonym/list

该接口返回的需要设置以下三个属性

$response->setLastModified($lastModified);$response->setEtag($etag, true);$response->headers->set('Content-Type', 'text/plain');

注:

nginx 在开启了 gzip 之后,如果有 ETAG 则会调用 ngx_http_clear_etag 将其清除,

解决的办法很简单:

只要 PHP 返回的 ETAG 是 weak ETAG,那么就一切都会正常起来了。而所谓的 weak ETAG,也就是弱 ETAG,它是相对于正常 ETAG 而言的,表现形式就是 ETAG 前面加上 W/

W/"db8b38e8a3257a2f195b727eceb2c5d3"

下面是设置远程, 本地同义词的配置

PUT /megacorp{  "mappings": {    "employee": {      "properties": {        "name":{          "type": "text",          "analyzer": "ik-index",  //指定索引时候用的解析器          "search_analyzer": "ik-smart" //指定搜索时候用的解析器        }      }    }  }  ,  "settings": {    "analysis": {      "filter": {        "remote_synonym": {            "type" : "dynamic_synonym",            "synonyms_path" : "http://localhost/synonym/list",            "interval": 60 // 没60s调取一次接口        },        "local_synonym" : {            "type" : "dynamic_synonym",            "synonyms_path" : "analysis/synonym.txt"          }      },      "analyzer": {        "ik-index": {          "type": "custom",          "tokenizer": "ik_max_word",          "filter": [               "remote_synonym", //对远程同义词进行了过滤              "local_synonym"   //对本地同义词进行了过滤           ]        },        "ik-smart": {          "type": "custom",          "tokenizer": "ik_smart",          "filter": [              "local_synonym"           ]        }      }    }  }}

转载于:https://www.cnblogs.com/spectrelb/p/8038980.html

你可能感兴趣的文章
oracle 游标
查看>>
滚动条滚动到最底部的方法总结
查看>>
想不劳而获的人太多了,而我就是其中一个
查看>>
hexo改造
查看>>
Python模块NumPy中的tile(A,rep) 函数
查看>>
JS实现打开本地文件或文件夹 ActiveXObject
查看>>
python中split函数的使用
查看>>
优化 SQL SELECT 语句性能
查看>>
Spring3 MVC 类型转换
查看>>
算法训练 Cowboys(DP)
查看>>
ns2简介
查看>>
9260与SAM-BA连接(转)
查看>>
不要忽略'\'
查看>>
require php中引用函数
查看>>
字符串操作练习:星座、凯撒密码、99乘法表、词频统计预处理
查看>>
Linux工具之Vim使用
查看>>
4405: 招生
查看>>
Sakai的版本
查看>>
C语言字符串函数
查看>>
POJ 分类
查看>>