elasticsearch - Elasticsearch 同义词搜索分析器在更新 synonyms.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 stop sudo service elasticsearch start
但两者都没有引起我的变化反映。即使它是搜索分析器,每次更新同义词文件时是否都需要重新索引?
解决方案
也许您正在寻找 Reload Search Analyzers 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
即使它是搜索分析器,每次更新同义词文件时是否都需要重新索引?
仅当在索引期间使用您的同义词时。如果它们仅在搜索期间使用,则不必每次都重新索引。
推荐阅读
- php - 如何遍历数组以根据`Php`中的给定日期设置价格
- java - 如果之前使用 FileUtils.copyFile() 复制了 zip 文件,则在解压过程中获取“java.util.zip.ZipException: invalid distances set”
- css - CSS - 带有媒体查询的类不适用于电子邮件模板中的元素
- linux - 'find' 命令给出:shell 脚本中没有这样的文件或目录错误
- delphi - 如何像 Office 一样在 Delphi 中编写“子”应用程序?
- regex - 正则表达式验证字符串的前后斜杠
- python - 有没有一种使用内部元素很少的多个数据框进行预测的方法?
- android - 如何解决这个 android 模拟器错误的大小调整?我正在使用 vscode 但模拟器显示如下
- java - 使用 Java 将 JSON 转换为 POJO 并赋值
- go - gorm 与 foreignKey 参考有很多关系