我正在尝试在Elasticsearch中实现简单的多标记同义词,但是没有得到我期望的结果。这是一些卷曲:
curl -XPOST "http://localhost:9200/test" -d'
{
"mappings": {
"my_type": {
"properties": {
"blah": {
"type": "string",
"analyzer": "my_synonyms"
}
}
}
},
"settings": {
"index": {
"analysis": {
"filter": {
"my_syn_filt": {
"type": "synonym",
"synonyms": [
"foo bar, fooo bar"
]
}
},
"analyzer": {
"my_synonyms": {
"filter": [
"lowercase",
"my_syn_filt"
],
"tokenizer": "keyword"
}
}
}
}
}
}'
索引一些文件:
curl -XPUT localhost:9200/test/my_type/1 -d '{"blah": "fooo bar"}'
curl -XPUT localhost:9200/test/my_type/2 -d '{"blah": "fooo barr"}'
curl -XPUT localhost:9200/test/my_type/3 -d '{"blah": "foo bar"}'
现在查询:
curl -XPOST "http://localhost:9200/test/_search" -d'
{
"query": {
"match": {
"blah": "foo bar"
}
}
}'
我希望找回文件1和3,然而,只能回来3.有谁知道问题可能是什么?
经过进一步检查,我在直接调用分析仪时也没有得到预期的代币:
curl 'localhost:9200/test/_analyze?analyzer=my_synonyms' -d 'fooo bar'
当我期待两个标记时,只返回一个标记“fooo bar”:“fooo bar”和“foo bar”。
答案 0 :(得分:1)
看起来如果您搜索了' fooo bar'相反,您将获得文档1和3.要获得您期望的结果,您将不得不翻转您的同义词术语以反过来:
" fooo bar => foo bar"
箭头告诉ES在右侧添加术语作为左侧所有术语的同义词。如果你想要它们是双向的,你可以简单地做“fooo bar,foo bar'并确保expand未明确设置为false。