如何动态更改ElasticSearch的同义词

时间:2013-08-27 22:49:52

标签: elasticsearch

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

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

有人问过类似的问题 - 请参阅Change dynamically elasticsearch synonyms - 但是通过阅读该问题的答案,我无法弄清楚我需要什么。

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

index :
  analysis :
    analyzer :
      myanalyzer :
        filter: [standard, mysynonymfilter]
filter :
  mysynonymfilter :      
    type : synonym
    synonyms : synonyms.txt
    ignore_case : false
    expand : true
    format : solr

我的想法是做以下事情:

curl -XPUT 'http://127.0.0.1:9200/foo/_settings'  -d '
{
    "filter" : {
        "synonym" : {
            "type" : "mysynonymfilter",
            "synonyms" : [
                "cosmos, universe"
            ] 
        }
    }
}
'

但这似乎并不像我想要的那样。也就是说,就我所知,索引设置不会更新。

我想做的是什么?如果是这样,任何想法我做错了什么?

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

感谢您的帮助, 埃里克

5 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我知道这是一个老线程,但万一它可以帮助某人。 答案可以找到here

  

如果您使用stopwords参数指定内联词,那么您的   唯一的选择是关闭索引并更新分析器   配置更新索引设置API,然后重新打开   索引。

     

如果您在带有文件的文件中指定停用词,则更容易   stopwords_path参数。您只需更新文件(在每个节点上)   在群集中)然后强制重新创建分析器   这些行动中的任何一个:

     

关闭并重新打开索引(请参阅打开/关闭索引)或重新启动   群集中的每个节点,一个接一个

答案 3 :(得分:1)

您已在最终的curl命令中翻转了mysynonymfiltersynonym。类型应为synonym

答案 4 :(得分:1)

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

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

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

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