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