我正在使用elasticsearch 6.1,我正在尝试根据此文档为我的设置添加基本同义词过滤器:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html
这是我的代码:
curl -XPUT 'localhost:9200/test_index?pretty' -H 'Content-Type: application/json' -d'
{
"settings": {
"index" : {
"analysis" : {
"analyzer" : {
"search_synonyms" : {
"type": "custom",
"tokenizer" : "keyword",
"filter" : ["lowercase","synonyms"]
}
},
"filter" : {
"synonyms" : {
"type" : "synonym",
"synonyms_path" : "analysis/synonyms.txt"
}
}
}
}
}
}'
我收到以下错误消息:
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "IOException while reading synonyms_path_path: /usr/share/elasticsearch/config/analysis/synonyms.txt"
}
],
"type" : "illegal_argument_exception",
"reason" : "IOException while reading synonyms_path_path: /usr/share/elasticsearch/config/analysis/synonyms.txt",
"caused_by" : {
"type" : "no_such_file_exception",
"reason" : "/usr/share/elasticsearch/config/analysis/synonyms.txt"
}
},
"status" : 400
}
我认为这个问题来自于“...... reading synonyms_path_path:”,这应该只是“......读同义词路径:”。
但是,我相信我尊重文档中提到的所有功能。
此外,如果我试着放下:
"filter" : {
"synonyms" : {
"type" : "synonym",
"synonyms" : "analysis/synonyms.txt"
}
}
它只是不读取文件...
我的synonyms.txt与solr格式文档中显示的文件完全相同。
有关如何解决此问题的任何想法或建议?
非常感谢你的时间。
答案 0 :(得分:0)
通过在文件中使用以下命令,我修复了错误消息:
sudo chmod 777 synonyms.txt
但是分析器仍然无法识别文件中存在的同义词。 的确,synonyms.txt包含:i-pod,i pod => iPod的
如果我尝试:
curl -XGET 'localhost:9200/test_index/_analyze?pretty' -H 'Content-Type: application/json' -d'
{
"analyzer": "search_synonyms",
"text": "i pod"
}'
我明白了:
{
"tokens" : [
{
"token" : "i pod",
"start_offset" : 0,
"end_offset" : 5,
"type" : "word",
"position" : 0
}
]
}
问题尚未完全解决,但到了那里:)。
答案 1 :(得分:0)
"filter" : {
"synonyms" : {
"type" : "synonym",
"synonyms" : "synonyms.txt"
}
}
试试这个。它对我有用。
答案 2 :(得分:0)
有点晚了,但正如 Aurelien Quillet 指出的那样,我在使用 docker 时遇到了同样的问题。
你可能需要类似的东西
services:
elasticsearch_container:
volumes:
- ${APPLICATION}/config/packages/synonyms.txt:/usr/share/elasticsearch/config/synonyms.txt
就我而言,${APPLICATION}/config/packages/synonyms.txt
是我的项目代码中的路径。
错误中显示的路径 (/usr/share/elasticsearch/config/synonyms.txt
) 是我的 elasticsearch 容器中的路径。