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