我的同义词存储在数据库中,当同义词在数据库中发生变化时,我希望更新索引中可能因同义词变化而发生变化的任何值。
我能想到的有两个部分。第一,弄清楚哪些文档需要重新索引。第二,弄清楚如何告诉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"
]
}
}
}
'
型
但这似乎并没有做我想要的。也就是说,索引设置没有得到更新,因为我可以告诉。
我正在努力做的事情是可能的吗?如果是,你知道我做错了什么吗?
另外,我相当肯定我可以通过更新同义词文件(如果我必须使用文件的话)来实现这一点,但是这有点复杂,我想避免。
谢谢你的帮助,埃里克
6条答案
按热度按时间dfddblmv1#
事实证明,您可以通过编程方式告诉ElasticSearch同义词已经更改。也就是说,没有必要更新同义词文件。以下是必要的基本步骤:
b5buobof2#
我知道这是一个旧的线程,但截至ES 7.5,他们增加了一个新的功能,以更新同义词。看看他们的documentation。
您需要发出一个POST API,如下所示
POST /twitter/_reload_search_analyzers
这将重新加载所有搜索分析器,还确保同义词标记过滤器将
updateable
标志设置为true
,如"updatedable": true
。PS:这个功能是X-Pack的一部分,并且在基本许可证下是免费的。
a9wyjsp73#
我知道这是一个古老的线程,但如果它帮助别人.答案可以在这里找到:
如果在stopwords参数中指定了内联的stopwords,则唯一的选择是关闭索引并使用更新索引设置API更新分析器配置,然后重新打开索引。
如果您在带有stopwords_path参数的文件中指定停止字,则更新停止字会更容易。您可以只更新文件(在集群中的每个节点上),然后通过以下任一操作强制重新创建分析器:
关闭并重新打开索引(请参阅打开/关闭索引),或逐个重新启动群集中的每个节点
von4xj4u4#
有一个重新加载同义词文件lindstromhenrik/elasticsearch-analysis-file-watcher-synonym的项目虽然我不知道它是否适用于最新版本。也许你可以通过使用插件和扩展同义词在查询时开始,因为在查询时,你会有所有的同义词更新,而不是重新索引文档,你猜应该更新,因为在同义词文件的变化。
lymnna715#
在最后一个curl命令中,您已经翻转了
mysynonymfilter
和synonym
。类型应该是synonym
。ohtdti5x6#
在2023年使用
7.16.3
版本并将*.txt
同义词文件放在{ES_HOME}/config/analysis
文件夹中;下面是我用来创建模式的索引
settings
。字符串
下面是我的
mappings
,用于定义synonym
分析器在实际field
中的用法。型
这里需要注意的是,同义词分析器是可更新的,因此必须在search_analyzer阶段使用,而不是在索引阶段使用,否则会出错。
为了强制更新同义词列表,* 在elasticsearch的每个节点上更新synchron.txt文件,然后消耗以下2个API来更新同义词列表 *,这是同义词更新后的必经步骤。
型