我的同义词存储在数据库中,当在数据库中更改同义词时,我想更新索引中的任何值,这些值可能会因同义词更改而更改。
我能想到的有两个部分。一,找出要重新索引的文件。二,弄清楚如何告诉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"
]
}
}
}
'
但这似乎并不像我想要的那样。也就是说,就我所知,索引设置不会更新。
我想做的是什么?如果是这样,任何想法我做错了什么?
另外,我相信我可以通过更新同义词文件(如果我必须使用文件)来实现这一点,但这有点复杂,我想避免这种情况。
感谢您的帮助, 埃里克
答案 0 :(得分:9)
事实证明,您可以通过编程方式告诉ElasticSearch同义词已更改。也就是说,没有必要更新同义词文件。以下是必要的基本步骤:
答案 1 :(得分:2)
有一个重新加载同义词文件的项目lindstromhenrik/elasticsearch-analysis-file-watcher-synonym虽然我不知道它是否适用于最新版本。也许您可以在查询时使用插件和扩展同义词开始,因为在查询时您将更新所有同义词,而不是重新索引您认为应该更新的文档,因为同义词文件中的更改。
答案 2 :(得分:2)
我知道这是一个老线程,但万一它可以帮助某人。 答案可以找到here:
如果您使用stopwords参数指定内联词,那么您的 唯一的选择是关闭索引并更新分析器 配置更新索引设置API,然后重新打开 索引。
如果您在带有文件的文件中指定停用词,则更容易 stopwords_path参数。您只需更新文件(在每个节点上) 在群集中)然后强制重新创建分析器 这些行动中的任何一个:
关闭并重新打开索引(请参阅打开/关闭索引)或重新启动 群集中的每个节点,一个接一个
答案 3 :(得分:1)
您已在最终的curl命令中翻转了mysynonymfilter
和synonym
。类型应为synonym
。
答案 4 :(得分:1)
我知道这是一个旧线程,但是从ES 7.5开始,他们添加了新功能来更新同义词。看看他们的documentation。
您需要发出这样的POST api
POST /twitter/_reload_search_analyzers
这将重新加载所有搜索分析器,并确保将同义词标记过滤器的updateable
标志设置为true
,例如"updatedable": true
。
PS:此功能是X-Pack的一部分,并具有免费的基本许可证。