9

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

我能想到的有两个部分。一,找出要重新索引的文档。第二,弄清楚如何告诉 ElasticSearch 同义词发生了变化。我正在为第二个苦苦挣扎 - 告诉 ElasticSearch 同义词已经改变。

有人问了一个类似的问题 - 请参阅动态更改弹性搜索同义词- 但通过阅读该问题中的答案,我无法弄清楚我需要什么。

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

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"
            ] 
        }
    }
}
'

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

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

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

谢谢你的帮助,埃里克

4

5 回答 5

11

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

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

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

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

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

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

于 2020-01-17T19:45:36.273 回答
2

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

于 2013-08-28T07:13:54.943 回答
2

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

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

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

关闭和重新打开索引(参见打开/关闭索引),或者重启集群中的每个节点,一个一个

于 2017-07-12T07:04:36.513 回答
1

您已经翻转mysynonymfiltersynonym进入了最后的 curl 命令。类型应该是synonym.

于 2015-10-29T03:04:45.943 回答