【发布时间】:2014-02-05 07:37:04
【问题描述】:
我有一个类似以下设置和映射的索引;
{
"settings":{
"index":{
"analysis":{
"analyzer":{
"analyzer_keyword":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}
}
}
},
"mappings":{
"product":{
"properties":{
"name":{
"analyzer":"analyzer_keyword",
"type":"string",
"index": "not_analyzed"
}
}
}
}
}
我正在努力在name 字段上实现通配符搜索。我的示例数据是这样的;
[
{"name": "SVF-123"},
{"name": "SVF-234"}
]
当我执行以下查询时;
http://localhost:9200/my_index/product/_search -d '
{
"query": {
"filtered" : {
"query" : {
"query_string" : {
"query": "*SVF-1*"
}
}
}
}
}'
它返回SVF-123,SVF-234。我认为,它仍然标记数据。它必须只返回SVF-123。
你能帮忙吗?
提前致谢
【问题讨论】:
-
仅供参考,你真的不想要一个前导通配符,我认为如果你这样做,它会查看每个文档。
-
我知道性能上的缺陷,但我需要执行通配符搜索,即使是 SVF-*
-
我认为尾随通配符很好,你只是不想要前导通配符..
-
当用户 VF 时,IT 应该返回 SVF-... 这就是我使用前导通配符的原因
-
我认为最好的做法是使用reverse token,这样前导通配符就可以变成尾随通配符。
标签: search lucene elasticsearch tokenize