Elasticsearch 自定义分词同义词环节的这个细节不大好理解......

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 扩展背景描述:这是 Elasticsearch 自定义分词 Text analysis 章节 Token filter reference 小节的 同义词 token 过滤 (Synonym token filter)的一个参数。的确,官方文档讲解的不详细。我们彻底解读一下。

2、自定义分词基础认知

如果读者们对自定义分词的实现有疑问,推荐阅读:


Elasticsearch自定义分词,从一个问题说开去


3、给个实战例子,一探究竟

3.1 自定义分词 DSL

PUT test_index

{

 "settings": {

   "index": {

     "analysis": {

       "analyzer": {

         "synonym": {

           "tokenizer": "whitespace",

           "filter": [

             "synonym"

           ]

         }

       },

       "filter": {

         "synonym": {

           "type": "synonym",

           "lenient": true,

           "synonyms": [

             "ipod, i-pod, i pod"

           ]

         }

       }

     }

   }

 },

 "mappings": {

   "properties": {

     "title": {

       "type": "text",

       "analyzer": "synonym"

     }

   }

 }

}

解读如下:

image.png

如图所示,结合前面的 DSL 定义。


自定义分词器的名字:synonym。


tokenizer 使用:whitespace 空白分词器。


filter 也就是 token filter 使用:synonym 同义词实现。


而空白分隔分词器的本质,举例如下:


POST _analyze

{

 "analyzer": "whitespace",

 "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."

}

分词后的结果为:



The


2


QUICK


Brown-Foxes


jumped


over


the


lazy


dog's


bone.


概括一下:空格分词器在遇到空格字符时会将文本分解为多个词,仅以空格作为分词分隔单元。


3.2  token filter 细节参数解读

参数 1 —— "type": "synonym"


含义:同义词类型。


参数 2 ——"lenient": true


含义:如果为 true,则在解析同义词配置时会忽略异常。重要的是要注意,只有那些无法解析的同义词规则才被忽略。


默认值:false。


参数 3 —— "synonyms"


指定同义词,也就是指定谁和谁成为同义词。


参数4 ——“expand ”


这个就是文章开头提及的参数,缺省值就是 true。所以上述 DSL 并没有显示指定。


那参数:expand 到底啥意思呢?


4、通过对比,认清 expand 含义

4.1 验证 DSL

POST test_index/_doc/1

{"title":"ipod is my love"}

POST test_index/_doc/2

{"title":"i-pod is my love"}

POST test_index/_doc/3

{"title":"i pod is my love"}

POST test_index/_search

{

 "query": {

   "match": {

     "title": "ipod"

   }

 }

}

POST test_index/_search

{

 "query": {

   "match": {

     "title": "i-pod"

   }

 }

}

POST test_index/_search

{

 "query": {

   "match": {

     "title": "i pod"

   }

 }

}

4.2 expand设置为 true

默认值,无需指定即可生效。


分词验证一把:


POST test_index/_analyze

{

 "text":"i pod is my love",

 "analyzer": "synonym"

}

结论截图如下:

image.png

执行 4.1 的 DSL,检索任何一个,全量三个文档都能返回。


ipod, i-pod, i pod 的含义如下:


具体意思:


ipod 等价于  ipod, i-pod, i pod 三个的每一个。


i-pod等价于  ipod, i-pod, i pod 三个的每一个。


i pod 等价于  ipod, i-pod, i pod 三个的每一个。


而,"ipod, i-pod, i pod => ipod"的含义如下:


POST test_index/_analyze

{

 "text":"i pod is my love",

 "analyzer": "synonym"

}

image.png

进一步解读为:


ipod 仅等价于  ipod,。


i-pod 仅等价于  ipod,。


i pod 仅等价于  ipod,。


4.3 expand设置为 false

DELETE test_index

PUT test_index

{

 "settings": {

   "index": {

     "analysis": {

       "analyzer": {

         "synonym": {

           "tokenizer": "whitespace",

           "filter": [

             "synonym"

           ]

         }

       },

       "filter": {

         "synonym": {

           "type": "synonym",

           "expand":false,

           "lenient": true,

           "synonyms": [

             "ipod, i-pod, i pod"

           ]

         }

       }

     }

   }

 },

 "mappings": {

   "properties": {

     "title": {

       "type": "text",

       "analyzer": "synonym"

     }

   }

 }

}

POST test_index/_analyze

{

 "text":"i pod is my love",

 "analyzer": "synonym"

}

POST test_index/_analyze

{

 "text":"i-pod is my love",

 "analyzer": "synonym"

}

上述最后两个 analyze 分词结果为:

image.png

ipod, i-pod, i pod 的含义如下:ipod, i-pod, i pod 和 ipod 等价。具体意思:


ipod  仅 等价于  ipod一个。


i-pod  仅 等价于  ipod一个。


i pod 仅 等价于  ipod一个。


"ipod, i-pod, i pod => ipod"的含义同 4.2 解读,不再赘述。


5、有了结论再看官方文档

image.png

expand 是扩展的意思。

  • 如果为 true,支持扩展,和每一个同义词是同义词。
  • 如果为 false,不支持扩展,仅和最后指向的同义词同义。

6、小结

实践一把,探究真相!

和你一起,死磕 Elastic!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
68 5
|
2月前
|
自然语言处理 Java 网络架构
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
这篇文章是关于如何自定义Elasticsearch的ik分词器配置以满足特定的中文分词需求。
144 0
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
|
1月前
|
测试技术 API 开发工具
ElasticSearch的IK分词器
ElasticSearch的IK分词器
49 7
|
2月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
186 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
4月前
|
自然语言处理 应用服务中间件 nginx
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
这篇文章是关于如何在Elasticsearch中安装和使用ik分词器的详细教程,包括版本匹配、安装步骤、分词测试、自定义词库配置以及创建使用ik分词器的索引的方法。
一文教会你 分词器elasticsearch-analysis-ik 的安装使用【自定义分词库】
|
3月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
4月前
|
JSON 自然语言处理 Java
ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(Completion Suggest)
ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(Completion Suggest)
113 1
|
4月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
4月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
64 0
|
4月前
|
存储 自然语言处理 Java
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
54 0