实时更新Elasticsearch同义词

Xon*_*nos 5 elasticsearch

背景:一直以来,我一直认为,如果同义词文件发生任何更改,则需要重新索引整个索引。当然,如果索引大小很小,这个过程不会那么慢,但是这个过程本身很乏味,并且会有停机时间。

所以问题:

  1. 在这种情况下我的理解是错误的吗?是否意味着有更简单的方法来反映我的索引的同义词更改?无需重新索引。

  2. 未来的需求是,无需手动更新文件中的规则,也许可以从数据库甚至 UI 进行更改。这可以做到吗?如果这是可能的,可以启发或建议我如何做到这一点吗?

  3. 我相信这与查询或索引时间同义词扩展有关,之前在这里出现过类似的问题:问题,但这是否仍然适用于当前的 ES 版本 5、6 甚至 7?由于权威指南早在第 2 版就已经发布了,所以我有点担心它已经过时了。

  4. 如果使用查询时同义词,如果我对同义词文件进行了任何更改,是否需要重新启动节点才能生效?

谢谢。

Goo*_*ogi 3

    \n
  • 重新索引是一种方法。
  • \n
  • 是的,您可以获取模板并通过 API 使用同义词更新它。但是此处需要再次打开和关闭索引
  • \n
  • 您可以使用基于文件的同义词来避免重新索引。
  • \n
\n\n

您可以关闭索引、更新同义词列表并打开索引。\n更新同义词列表不会更改任何已编入索引的文档。它将仅适用于搜索以及新的或更新的文档。要将更改应用到现有文档,您需要重新索引数据。\n以下链接可能会有所帮助:

\n\n

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html \n https://sharing.luminis.eu/blog/updatable-synonyms-in-elasticsearch-bol -com/

\n\n

可以在查询时和索引时应用同义词,在性能和灵活性之间进行权衡。\n您可以在此处阅读这两种方法的优缺点:https: //www.elastic.co/guide/en/elasticsearch/ Guide/1.x/synonyms-expand-or-contract.html#synonyms-expansion
\n在映射中使用 \xc2\xa0search_analyzer\xc2\xa0 而不是 \xc2\xa0analyzer\xc2\xa0 将使同义词分析器仅在搜索时使用。

\n\n

回答你的问题:(评论中提到)。
\n对“更新同义词列表不会更改任何已编入索引的文档”有什么影响?
\n - 查询时间方法将选择同义词,索引时间不会\xe2\x80\x99t。
\n这是否意味着新同义词不会影响所有现有文档?
\n - 是的,它不会\xe2\x80\x99t影响文档,但会根据配置的同义词影响搜索结果。
\n例如,我现有的文档中有McD,然后我添加了一个新的同义词McD,McDonald,这是否意味着如果不重新索引,这个同义词将不起作用?
\n - 我相信以上两个 QA 回答了这个问题。

\n\n

欲了解更多信息,请参阅这篇文章:http://bitsandbites.me/blog/2014/04/08/elasticsearch-synonyms/

\n

  • 对于版本 6 来说,版本 7 还没有尝试过。但是如果弹性搜索删除了任何功能,就会提到 Deprecated 。如果他们还没有对索引类型这样做,则意味着它在那里。 (2认同)
  • 如果您转向基于文件的同义词,则需要重新启动节点。 (2认同)