【发布时间】:2011-11-08 11:58:05
【问题描述】:
是否可以将 elasticsearch 的同义词存储在索引中?或者是否可以从像 couchdb 这样的数据库中获取同义词列表? 我想通过 REST-API 将同义词动态添加到 elasticsearch。
【问题讨论】:
标签: lucene elasticsearch
是否可以将 elasticsearch 的同义词存储在索引中?或者是否可以从像 couchdb 这样的数据库中获取同义词列表? 我想通过 REST-API 将同义词动态添加到 elasticsearch。
【问题讨论】:
标签: lucene elasticsearch
使用同义词有两种方法:
不建议在查询时扩展同义词,因为它会引发以下问题:
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory(在 Solr wiki 上,但也与 ElasticSearch 相关)了解更多详情。
所以推荐的方法是在索引时扩展同义词。在您的情况下,如果同义词列表是动态管理的,这意味着您应该重新索引每个包含同义词列表已更新的术语的文档,以便在更新前和更新后分析的文档之间保持评分一致。我并不是说这是不可能的,但它需要一些工作,并且可能会导致索引中出现频率较高的同义词出现性能问题。
【讨论】:
对于几年前其他答案中提出的解决方案,现在几乎没有新的解决方案。作为插件实现的两种主要方法:
关于这个主题的好讨论可以在 elastisearch github 票务系统上找到:https://github.com/brusic/refresh-token-filters
【讨论】:
在 elasticsearch 中更新同义词列表并不会太痛苦。它可以通过打开和关闭来完成您可以从任何地方驱动它,但需要一些您自己的基础设施。它会像这样工作:
【讨论】:
在 2021 年,只需在查询时使用特定的 search analyzer 扩展同义词并使用 Reload analyzer API:
POST /my-index/_reload_search_analyzers
同义词图标记过滤器必须将updatable 设置为true:
"my-synonyms": {
"type": "synonym_graph",
"synonyms_path": "my-synonyms.txt",
"updateable": true
}
此外,您可能应该在查询时扩展同义词。为什么?
【讨论】: