弹性搜索同义词搜索分析器更新后不更新同义词.txt?



所以我有一个索引,其中包含搜索分析器中定义的同义词映射。当我第一次创建索引时,同义词是在搜索中选取的。之后,我更新了一次节点上的synonyms.txt文件以更新同义词映射,并在进行更改后重新启动每个节点。这导致同义词更改反映在索引中的搜索中。

现在,当我更改同义词文件并重新启动节点时,同义词映射没有像我认为的那样更新。我错过了什么吗?我认为由于同义词映射位于search_analyzer上,因此我不必每次都重新索引以反映更改。

这是我的索引定义:

PUT /synonym_index
{
"aliases": {},
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text",
"fields": {
"english": {
"type": "text",
"analyzer": "english",
"search_analyzer":"english_and_synonyms"
}
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"english": {
"tokenizer":  "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_keywords",
"english_stemmer"
]
},
"english_and_synonyms": {
"tokenizer":  "standard",
"filter": [
"search_synonyms",
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_keywords",
"english_stemmer"
]
}
},
"filter": {
"english_stop": {
"type":       "stop",
"stopwords":  "_english_" 
},
"english_keywords": {
"type":       "keyword_marker",
"keywords":   ["example"] 
},
"english_stemmer": {
"type":       "stemmer",
"language":   "english"
},
"english_possessive_stemmer": {
"type":       "stemmer",
"language":   "possessive_english"
},
"search_synonyms" : {
"type" : "synonym_graph",
"synonyms_path" : "analysis/synonyms.txt"
}
}
},
"index": {
"number_of_shards": "5",
"number_of_replicas": "1"
}
}
}

我试过重新启动节点

sudo service elasticsearch restart

并且还与

sudo service elasticsearch stop sudo service elasticsearch start

但两者都没有导致我的更改反映出来。每次更新同义词文件时,即使它是搜索分析器,我是否需要重新编制索引?

若要反映同义词文件中的更改,需要在对文件进行更改后关闭并打开索引。这可以通过执行 post 请求来完成:

POST /synonym_index/_close
POST /synonym_index/_open

_open通话后,您应该会看到搜索中反映的更改

也许重新加载搜索分析器 API 就是您正在寻找的: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-reload-analyzers.html

您必须声明您的同义词updatable

"search_synonyms" : {
"type" : "synonym_graph",
"synonyms_path" : "analysis/synonyms.txt",
"updatable": true
}

在映射中,您需要声明自定义search_analyzer:

"mappings": {
"properties": {
"one_attribute": {
"type": "text",
"search_analyzer": "english_and_synonyms" 
}
}
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html

每次更新同义词文件时,即使它是搜索分析器,我是否需要重新编制索引?

仅当同义词在索引期间使用时。如果仅在搜索期间使用它们,则不必每次都重新编制索引。

最新更新