elasticsearch 使用同义词

使用环境

安装插件

下载对应的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"
]
}
}
}
}
}

最新文章

  1. requests 快速入门
  2. CSS的clip-path 一
  3. C语言学习004:数组与指针
  4. BZOJ 1109: [POI2007]堆积木Klo
  5. ubuntu apt-get update 失败解决
  6. AHOI2013 Round2 Day1 简要题解
  7. 公交CPU卡原理
  8. Effective Java单元测试TestNG - 就是爱Java
  9. 【IOS开发】创建XML文件
  10. 【干货】Markdown编辑博文,公式图片轻松搞定
  11. 201521123105 第四周Java学习总结
  12. VM磁盘映射共享方法,要求文件系统必须一致
  13. 【Spark-SQL学习之一】 SparkSQL
  14. 检测Android手机的IP地址
  15. 如何查看Isilon节点的硬件信息?
  16. tensorflow训练自己的数据集实现CNN图像分类1
  17. 智能跳转---TC资源管理器
  18. Git修改子模块的路径
  19. Nginx web服务优化 (一)
  20. ETL利器Kettle实战应用解析系列三

热门文章

  1. 01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
  2. POI CellStyle 中样式覆盖问题
  3. 免费申请HTTPS通配符证书
  4. drf 权限校验设置与源码分析
  5. uniapp微信小程序获取当前用户手机号码(前端)
  6. MeterSphere开发者手册
  7. hdu3974 Assign the task线段树 dfs序
  8. fflush(stdin)和fflush(stdout)
  9. Java自动化测试框架-02 - TestNG之理论到实践
  10. git clone下载速度慢的解决方案