更改动态弹性搜索同义词

时间:2011-09-01 15:10:19

标签: lucene elasticsearch

是否可以在索引中存储elasticsearch的同义词?或者是否可以从像couchdb这样的数据库中获取同义词列表? 我想通过REST-API动态地将同义词添加到elasticsearch。

3 个答案:

答案 0 :(得分:16)

使用同义词时有两种方法:

  • 在索引时扩展它们,
  • 在查询时扩展它们。

建议不要在查询时扩展同义词,因为它会引发以下问题:

  • 得分,因为同义词具有不同的文档频率,
  • 多标记同义词,因为查询解析器在空格上分割。

有关此问题的详细信息,请访问http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory(在Solr wiki上,但与ElasticSearch相关)。

因此推荐的方法是在索引时扩展同义词。在您的情况下,如果动态管理同义词列表,则意味着您应该重新索引包含已更新同义词列表的术语的每个文档,以便在更新前后分析的文档之间保持一致。我并不是说它不可能,但它需要一些工作,并且可能会引起索引中频率较高的同义词的性能问题。

答案 1 :(得分:3)

几年前,在其他答案中提出的解决方案现在几乎没有新的解决方案。作为插件实现的两种主要方法:

  1. file-watcher-synonym filter是一个插件,可以定期重新加载每个给定秒数的同义词,如用户所定义。
  2. refresh-token-plugin允许实时更新索引。但是,这个插件一直存在一些问题,这些问题源于弹性搜索无法在搜索时区分析分析器与索引时使用的分析器。
  3. 关于这个主题的讨论可以在elastisearch github票证系统上找到:https://github.com/brusic/refresh-token-filters

答案 2 :(得分:2)

在弹性搜索中更新同义词列表并不太痛苦。它可以通过打开和关闭来完成您可以从任何地方驱动它,但需要一些自己的基础设施。它的工作原理如下:

  • 您想要一个指向当前索引的别名
  • 将新索引文件同步到您的服务器
  • 使用使用新索引的自定义分析器
  • 创建新索引
  • 将内容从当前索引重建为新索引
  • 将索引别名从当前重新定位到新索引