实时更新 Elasticsearch 同义词

Posted

技术标签:

【中文标题】实时更新 Elasticsearch 同义词【英文标题】:Update Elasticsearch synonym in real time 【发布时间】:2019-09-06 00:06:53 【问题描述】:

背景: 一直以来,我一直认为,如果同义词文件有任何变化,您将需要重新索引整个索引。当然,如果索引大小很小,这个过程并没有那么慢,但是这个过程本身很繁琐,而且会有停机时间。

所以问题:

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

    未来的要求是,与其手动更新文件中的规则,不如从 DB 甚至 UI 中进行更改。这可以做到吗?如果可能的话,能否启发或建议我如何做到这一点?

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

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

谢谢。

【问题讨论】:

【参考方案1】: 重新索引是一种方法。 是的,您可以通过 API 获取模板并使用同义词对其进行更新。但此处需要再次打开和关闭索引 您可以使用基于文件的同义词来避免重新编制索引。

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

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

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

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

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

【讨论】:

感谢您的友好回复。所以这里是我不明白的事情,对“更新同义词列表不会改变任何已经被索引的文档”有什么影响?这是否意味着新的同义词不会影响所有现有的文档?例如,我现有的文档中有 McD,然后我添加了一个新的同义词 McD,McDonald,这是否意味着没有重新索引,这个同义词将不起作用? @Xonos ,我已经编辑了您上述问题的答案,如果它回答了您的所有问题,请考虑接受。 感谢您的回答,我已经接受了。但是根据您的解释,即使当前的 ES 版本是 7 版,查询时间和索引时间的同义词似乎仍然存在,不是吗? 对于第 6 版,有 7 版没有尝试过。但是弹性搜索提到 Deprecated ,如果他们放弃任何功能。如果他们没有为索引类型做这件事,那就意味着它在那里。 如果你移动到基于文件的同义词,你需要重启节点。

以上是关于实时更新 Elasticsearch 同义词的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 安装

ElasticSearch的应用

ElasticSearch相关概念总结

elasticsearch 使用同义词

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能