如何动态更改ElasticSearch的同义词

Eri*_*ric 8 elasticsearch

我的同义词存储在数据库中,当在数据库中更改同义词时,我想更新索引中的任何值,这些值可能会因同义词更改而更改.

我可以想到有两个部分.一,找出要重新索引的文件.二,弄清楚如何告诉ElasticSearch同义词已经改变.我正在努力争取第二个 - 告诉ElasticSearch同义词已经改变了.

有一个类似的问题已被提出 - 请参阅更改动态弹性搜索同义词 - 但从阅读该问题的答案,我无法弄清楚我需要什么.

目前,我的配置文件如下所示:

index :
  analysis :
    analyzer :
      myanalyzer :
        filter: [standard, mysynonymfilter]
filter :
  mysynonymfilter :      
    type : synonym
    synonyms : synonyms.txt
    ignore_case : false
    expand : true
    format : solr
Run Code Online (Sandbox Code Playgroud)

我的想法是做类似以下的事情:

curl -XPUT 'http://127.0.0.1:9200/foo/_settings'  -d '
{
    "filter" : {
        "synonym" : {
            "type" : "mysynonymfilter",
            "synonyms" : [
                "cosmos, universe"
            ] 
        }
    }
}
'
Run Code Online (Sandbox Code Playgroud)

但这似乎没有做我想要的.也就是说,据我所知,索引设置不会更新.

我正在尝试做什么?如果是这样,任何想法我做错了什么?

此外,我相信我可以通过更新同义词文件(如果我必须使用文件)来实现这一点,但这有点复杂,我想避免的事情.

谢谢你的帮助,埃里克

Eri*_*ric 10

事实证明,您可以通过编程方式告诉ElasticSearch同义词已更改.也就是说,没有必要更新同义词文件.这是必要的基本步骤:

  • 关闭索引.
  • 使用新同义词列表更新索引设置.为了安全起见,我正在更新索引的所有分析器,标记器和字符过滤器(不仅仅是同义词过滤器) - 但我不确定是否有必要.
  • 打开索引.

  • 为什么这种奇怪的做法会得到 10 票赞成? (3认同)
  • 这种方法有多快? (2认同)

小智 7

我知道这是一个旧线程,但从 ES 7.5 开始,他们添加了一个新功能来更新同义词。看看他们的文档

您需要发出这样的 POST api POST /twitter/_reload_search_analyzers

这将重新加载所有搜索分析器,同时确保同义词标记过滤器将标志updateable设置为truelike this "updatedable": true

PS:此功能是 X-Pack 的一部分,并且属于免费的基本许可证。


mol*_*are 2

有一个用于重新加载同义词文件lindstromhenrik/elasticsearch-analysis-file-watcher-synonym 的项目,尽管我不知道它是否适用于最新版本。也许您可以从使用插件并在查询时扩展同义词开始,因为在查询时您将更新所有同义词,而不是重新索引您认为因同义词文件发生更改而应该更新的文档。