Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

Elasticsearch FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/elasticsearch-synonmy.html

Elasticsearch 同义词库配置及热更新等全解


Elasticsearch 同义词通过专有的同义词过滤器(synonym token filter)来进行工作,它允许在分析(analysis)过程中方便地处理同义词,一般是通过配置文件配置同义词。此外,同义词可以再建索引时或者检索时使用。

配置示例

PUT /test_index
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_synonym_analyser": {
            "tokenizer": "whitespace",
            "filter": [ "my_synonym" ]
          }
        },
        "filter": {
          "my_synonym": {
            "type": "synonym",
            "synonyms_path": "analysis/synonym.txt"
          }
        }
      }
    }
  }
}

同义词(synonym)配置语法

如上例子所示,es 同义词配置的 filter 语法具体如下选项:

  • type:指定 synonym,表示同义词 filter;
  • synonyms_path:指定同义词配置文件路径;
  • expand:该参数决定映射行为的模式,默认为 true,表示扩展模式,具体示例如下:
    • expand == true 时,
      ipod, i-pod, i pod
      等价于:
      ipod, i-pod, i pod => ipod, i-pod, i pod

      当 expand == false 时,

      ipod, i-pod, i pod

      仅映射第一个单词,等价于:

      ipod, i-pod, i pod => ipod
  • lenient:如果值为 true 时,遇到那些无法解析的同义词规则时,忽略异常。默认为 false。

同义词文档格式

elasticsearch 的同义词有如下两种形式:

  • 单向同义词:
    ipod, i-pod, i pod => ipod
  • 双向同义词:
    马铃薯, 土豆, potato

单向同义词不管索引还是检索时,箭头左侧的词都会映射成箭头右侧的词;

双向同义词是索引时,都建立同义词的倒排索引,检索时,同义词之间都会进行倒排索引的匹配。 

同义词的文档化时,需要注意的是,同一个词在不同的同义词关系中出现时,其它同义词之间不具有传递性,这点需要注意。

假设如上示例中,如果“马铃薯”和其它两个同义词分成两行写:

马铃薯,土豆
马铃薯,potato

此时,elasticsearch 中不会将“土豆”和“potato”视为同义词关系,所以多个同义词要写在一起,这往往是开发中经常容易疏忽的点。

###方式一:使用文档更新APIElasticsearch提供了文档更新API,您可以使用它来更新文档的部分内容,而无需完全替换整个文档。以 ...
安装和配置Elasticsearch可以分为以下几个步骤:下载Elasticsearch、安装Java、配置Elasticsearch、启动 ...
Elasticsearch是一个开源的分布式搜索和分析引擎,用于存储和检索大规模数据。节点名称(NodeName):为每个节点指定一个唯一的 ...
Guava 是一个 Google 开发的基于 Java 的类库集合的扩展项目,包括集合、缓存、原生类型支持、并发库、通用注解、字符串处理、I ...
在 es 使用中,开发者想配置自身业务中沉淀的同义词(synonyms)表,并基于该同义词库配置包含其的分析器(analyzer),主要分为 ...