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

elasticsearch 使用同义词的更多相关文章

  1. elasticsearch ik同义词

    由于elasticsearch 更新实在太快,配置同义词的资料层次不齐,费尽千辛万苦终于找到了.本文通过一个同义词搜索的简单实例来说明ik同义词的配置. 环境介绍 这点很重要,本文是基于elastic ...

  2. Elasticsearch 配置同义词

    配置近义词 近义词组件已经是elasticsearch自带的了,所以不需要额外安装插件,但是想要让近义词和IK一起使用,就需要配置自己的分析器了. 首先创建近义词文档 在config目录下 mkdir ...

  3. [大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置

    --题外话:最近发现了一些问题,一些高搜索量的东西相当一部分没有价值.发现大部分是一些问题的错误日志.而我是个比较爱贴图的.搜索引擎的检索会将我们的博文文本分词.所以图片内容一般是检索不到的,也就是说 ...

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

    [大数据]-Elasticsearch5.3.1 IK分词,同义词/联想搜索设置  原文地址:http://www.cnblogs.com/NextNight/p/6837407.html --题外话 ...

  5. ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现

    ElasticSearch 中文同义词实现 https://blog.csdn.net/xsdxs/article/details/52806499 参考以下两个网址,但运行报错,以下是我自己改进方式 ...

  6. Elasticsearch搜索资料汇总

    Elasticsearch 简介 Elasticsearch(ES)是一个基于Lucene 构建的开源分布式搜索分析引擎,可以近实时的索引.检索数据.具备高可靠.易使用.社区活跃等特点,在全文检索.日 ...

  7. 使用 Elasticsearch ik分词实现同义词搜索(转)

    1.首先需要安装好Elasticsearch 和elasticsearch-analysis-ik分词器 2.配置ik同义词 Elasticsearch 自带一个名为 synonym 的同义词 fil ...

  8. ElasticSearch 2 (25) - 语言处理系列之同义词

    ElasticSearch 2 (25) - 语言处理系列之同义词 摘要 词干提取有助于通过简化屈折词到它们词根的形式来扩展搜索的范围,而同义词是通过关联概念和想法来扩展搜索范围的.或许没有文档能与查 ...

  9. elasticsearch同义词及动态更新

    第一种:参考地址:http://dev.paperlesspost.com/setting-up-elasticsearch-synonyms/271.Add a synonyms file.2.Cr ...

随机推荐

  1. js工厂函数

    经常会遇到工厂函数这个词,不过javascript不是严格的面向对象语言,不像java,C#拥有类,所以工厂函数会变得比较模糊. 简单来讲,就是创建一个可以用来创建实例的函数,这样每一个实例都是独立的 ...

  2. FFmpeg 将大量图片合成为视频 video

    1.基本格式终端输入: ffmpeg -f image2 -i /home/ttwang/images/image%d.jpg tt.mp4其中/home/ttwang/images/images%d ...

  3. 痞子衡嵌入式:基于恩智浦i.MXRT1010的MP3音乐播放器(RT-Mp3Player)设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是基于i.MXRT1011的MP3播放器参考设计. i.MXRT1011是恩智浦i.MXRT四位数系列的入门型号,虽然是入门级,可也是50 ...

  4. 关于“Cannot resolve table 'user'”报错的问题解决

    springboot+vue建立映射时,后端引用@Table(name="user") 来对应表名 user,但引用后报错"Cannot resolve table 'u ...

  5. 关于windows下redis的安装

    1.下载地址:https://github.com/MSOpenTech/redis/releases 2.DOS下进redis文件夹目录,执行redis-server.exe redis.windo ...

  6. linux添加自动清空缓存

    1. cleanCache.sh vim cleanCache.sh #!/bin/bash #每两小时清除一次缓存 echo "开始清除缓存" sync;sync;sync #写 ...

  7. SQL Plus的使用详解(登录和常用命令)

    1.SQL Plus简介 SQL Plus工具是随 Oracle数据库服务器或客户端的安装而自动进行安装的管理与开发工具, Oracle数据库中所有的管理操作都可以通过 SQLPlus工具完成. SQ ...

  8. Java多线程经典题目(医院挂号)

    题目 实现一个医院的挂号机系统,要求:有多台挂号机同时运行,此时无论有多少患者挂号,要求都能挂到不同 的号码,并且要求实现当意外断电之后,下一次恢复还能从上次结束号码继续挂号? * synchroni ...

  9. 运维告警排班太复杂?试试Cloud Alert智能告警排班

    前言: 之前的几篇文章有说过,通过智能告警平台Cloud Alert,将指定条件的告警以多样化的通知方式,通知到指定的人,其中的通知的方式包含电话.短信.邮件.微信.APP.钉钉等. 本篇文章就来说下 ...

  10. sklearn.neighbors.NNeighborsClassifier 详细说明

    平时会用到sklearn.neighbors.NNeighborsClassifier函数来构建K最邻近分类器,所以这里对NNeighborsClassifier中的参数进行说明,文中参考的是scik ...