使用环境

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

本地写个接口

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
{"settings": {"index": {"number_of_shards": "5","number_of_replicas": "1","analysis": {"filter": {"remote_synonym": {"type": "dynamic_synonym","synonyms_path": "http://192.168.78.37:10001/synonym.txt","interval": 10},"edgeNgramFilter": {"type": "edge_ngram","min_gram": 1,"max_gram": 50}},"analyzer": {"ngramIndex": {"type": "custom","tokenizer": "keyword","filter": ["edgeNgramFilter","lowercase"]},"ngramLowercase": {"filter": ["lowercase"],"type": "custom","tokenizer": "ngramTokenizer"},"ikIndex": {"filter": ["remote_synonym"],"type": "custom","tokenizer": "ik_max_word"},"ikSearch": {"type": "custom","tokenizer": "ik_smart"},"keywordLowercase": {"type": "custom","filter": ["lowercase"],"tokenizer": "keyword"}},"tokenizer": {"ngramTokenizer": {"type": "nGram","min_gram": "1","max_gram": "3"}}}}},"mappings": {"type1": {"properties": {"title": {"type": "text","fields": {"ik": {"analyzer": "ikIndex","search_analyzer": "ikSearch","type": "text"},"keywordLowercase": {"analyzer": "keywordLowercase","type": "text"},"ngram": {"analyzer": "ngramLowercase","type": "text"}}}}}}
}

{ "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" ] } } } }

elasticsearch ik配置动态同义词相关推荐

  1. elasticsearch ik分词实现 中文、拼音、同义词搜索

    EasticSearch版本:1.5.2 1.配置分词器:配置IK,参照 <ElasticSearch 安装和使用IK分词器> 2.拼音分词器配置:使用已经编译好的:elasticsear ...

  2. Elasticsearch 安装配置及学习

    何为全文搜索? 全文搜索本质:非结构化数据转成结构化数据,提取非结构化数据 全文搜索是一种将文件中所有文件与搜索项匹配的文字资料检索方法 原理:建立本库 ---> 建立索引 ---> 执行 ...

  3. Elasticsearch5.3.1 IK分词,同义词/联想搜索设置

    本文主要是记录Elasticsearch5.3.1 IK分词,同义词/联想搜索设置,本来是要写fscrawler的多种格式(html,pdf,word...)数据导入的,但是IK分词和同义词配置还是折 ...

  4. Elasticsearch常用配置及性能参数

    Elasticsearch常用配置及性能参数 cluster.name: estest   集群名称 node.name: "testanya"  节点名称 node.master ...

  5. ElasticSearch——IK分词器的下载及使用

    ElasticSearch--IK分词器的下载及使用 1.什么是IK分词器 ElasticSearch 几种常用分词器如下: 分词器 分词方式 StandardAnalyzer 单字分词 CJKAna ...

  6. Elasticsearch进阶使用-动态模版

    总进度 Elasticsearch 8.1 认证工程师学习路线 今天我们来学习Elasticsearch中的动态模版,其实我们在第一课2.2.3章节中就已经学过了类似的了,链接如下 根据给定的需求创建 ...

  7. Elasticsearch参数配置汇总

    一.配置文件位置 Elasticsearch 有三个配置文件: elasticsearch.yml用于配置 Elasticsearch jvm.options用于配置 Elasticsearch JV ...

  8. 配置动态路由协议OSPF

    前言: 对于拓扑结构变化少,网络规模小时可以为路由器配置静态路由.但大型的网络和频繁变动的拓扑,就需要配置动态路由协议! 协议就是大家都遵循的规范. 比如你在廊坊,家在西藏,你爸让你回去买个普通的白炽 ...

  9. python爬虫如何配置动态爬虫代理

    很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问. 所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依 ...

最新文章

  1. 关于java.util.LinkedHashMap cannot be cast to ......的解决办法
  2. Linux综合大作业
  3. 作者:李崇纲,男,北京金信网银金融信息服务有限公司常务副总经理。
  4. k8s高可用集群_搭建高可用集群(部署master2和node节点)---K8S_Google工作笔记0058
  5. Linux下磁盘分区卸载和磁盘配额
  6. python3.4 + Django1.7.7 表单的一些问题
  7. 最实用的自媒体爆文采集工具,简单易出爆文
  8. 利用函数imnoise2处理噪声污染和spfilt处理滤波器
  9. 基于单片机的水温控制系统设计
  10. Snagit 2019 for Mac如何合并图像+安装方法详解
  11. matlab用prewitt算子,canny算子边缘检测_prewitt算子_matlab怎么中值滤波
  12. debian10将系统软件包和docker的软件源改成国内源
  13. 2010上机二 中国象棋马走日
  14. 《Python编程:从入门到实践》---项目2
  15. 免费在线生成二维码网站,支持二维码自定义
  16. 2018年中国光学镜头行业发展现状及发展趋势分析【图】
  17. 计算机病毒是一种能破坏计算机运行的,计算机病毒是一种能破坏计算机运行的()。...
  18. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(一)
  19. Numpy 组合数组的几种方法
  20. 微型计算机惠普1hm20av,微型计算机原理答案(1)

热门文章

  1. 首个“开源ChatGPT”来了:基于谷歌5400亿参数大模型,华人小哥出品,网友吐槽:这谁能跑?
  2. Java做诗_Java写诗程序
  3. No implementation found for java.lang.String android.os.SystemProperties.native_get(java.lang.String
  4. 手机怎么打开html页面,手机网页无法打开怎么办
  5. 汽车金融解决方案:加速建设汽车金融新生态
  6. 传说中的程序员十层楼
  7. 分析-ReadFile读取物理磁盘参数错误(87)问题
  8. 裁剪特定时长音乐需求之Audacity
  9. 万能驱动VIP版(EasyDrv) v7.23.317.2 正式版
  10. Android系统级开发进程清理功能的一些记录和发现(二)