Toggle navigation
首页
技术
骑行
羽毛球
资讯
联络我
登录
elasticsearch的同义词功能
2019-08-02
Elasticsearch
> 本文介绍如何使用elasticsearch上的同义词功能 同义词在搜索场景中是非常重要的功能,好在ELK平台已经提供了同义词功能供我们使用。 在[《Elasticsearch: 权威指南》](https://www.elastic.co/guide/cn/elasticsearch/guide/cn/using-synonyms.html)中也对同义词做了详细的说明 ## 同义词的设定有两种方法: 1. 直接通过 synonyms 指定 ``` "filter" : { "synonym" : { "type" : "synonym", "lenient": true, "synonyms" : ["foo, bar, baz"] } } ``` 2. 通过 synonyms_path 指定一个包含同义词的文件 ``` "filter" : { "synonym" : { "type" : "synonym", "synonyms_path" : "analysis/synonym.txt" } } ``` 对于第1种方法,优点是不用在server上建立单独的文件就可以创建同义词,缺点是当同义词更新时,需要发送指令修改index settings才能更改同义词,如果index非常多或者是通过模板建立,就需要逐一更新这些index,较耗时 对于第2种方法,优点就是没有上述的缺点带来的问题,缺点是需要在server上建立文件,而且如果server是集群,则需要保证每台server上都有同义词文件 ## 同义词的实现方式 同义词可以通过下面3种方式实现: 1. 简单扩展:"jump,hop,leap" 2. 简单收缩:"leap,hop => jump" 3. 类型扩展:"cat => cat,pet" 详细说明可参见 [扩展和搜索](https://www.elastic.co/guide/cn/elasticsearch/guide/cn/synonyms-expand-or-contract.html) 实际应用过程中,同义词可能是会发生变化的,如果索引的资料较多,希望在不重新索引的前提下让新的同义词生效,则可以考虑使用: * 在查询阶段使用简单扩展 * 在索引和查询阶段使用简单收缩 * 在查询阶段使用类型扩展 设定同义词 ``` "analysis": { "analyzer": { "analyzer_with_synonym": { "filter": [ "synonym_filter" ], "char_filter": [ ], "type": "custom", "tokenizer": "ik_max_word" } } "filter": { "synonym_filter": { "type": "synonym", "synonyms_path" : "analysis/synonym.txt" } } } ``` 在查询阶段使用简单扩展: ``` "query": { "bool": { "must":[{ "query_string": { "fields" : ["title^2", "content"], "query" : "ref", "default_operator": "AND", "analyzer": "analyzer_with_synonym" } },{ ... ``` ## 参考 * [扩展和搜索](https://www.elastic.co/guide/cn/elasticsearch/guide/cn/synonyms-expand-or-contract.html)
×
本文为博主原创,如需转载,请注明出处:
http://www.supperxin.com
返回博客列表