【问题标题】:How to dynamically change synonyms for ElasticSearch如何动态更改 ElasticSearch 的同义词
【发布时间】:2013-08-27 22:49:51
【问题描述】:

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

我能想到的有两个部分。一,找出要重新索引的文档。第二,弄清楚如何告诉 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"
            ] 
        }
    }
}
'

但这似乎并没有达到我想要的效果。也就是说,据我所知,索引设置没有得到更新。

我正在尝试做的事情可能吗?如果是这样,知道我做错了什么吗?

另外,我很确定我可以通过更新同义词文件(如果我必须使用文件)来实现这一点,但这有点复杂,我想避免这样做。

感谢您的帮助, 埃里克

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

    你需要像这样发布一个 POST api POST /twitter/_reload_search_analyzers

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

    PS:此功能是 X-Pack 的一部分,在免费的基本许可下。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这个方法有多快??
      • 为什么这种奇怪的方式有 10 个赞?
      【解决方案3】:

      我知道这是一个旧线程,但以防万一它对某人有所帮助。 答案可以在here找到:

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

      如果您在文件中指定停用词,则更新停用词会更容易 stopwords_path 参数。您可以只更新文件(在每个节点上 在集群中),然后强制重新创建分析器 以下任一操作:

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

      【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 感谢您的回复,但我相信如果我直接更新同义词文件,我知道如何解决我的问题,但我的问题旨在处理不必更新同义词文件(而是更新通过 REST 命令的同义词)。
      【解决方案5】:

      您在最后的 curl 命令中翻转了 mysynonymfilter 和 synonym。类型应该是synonym。

      【讨论】:

        猜你喜欢
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多