【发布时间】:2014-09-22 08:30:31
【问题描述】:
我想对QNMZ-1900进行通配符查询
正如我在文档中阅读并自己尝试过的那样,Elasticsearch 的标准分词器会拆分连字符上的单词,例如 QNMZ-1900 将拆分为 QNMZ 和 1900。
为了防止这种行为,我使用了not_analyzed 功能。
curl -XPUT 'localhost:9200/test-idx' -d '{
"mappings": {
"doc": {
"properties": {
"foo" : {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}'
我正在将一些东西放入我的索引中:
curl -XPUT 'localhost:9200/test-idx/doc/1' -d '{"foo": "QNMZ-1900"}'
刷新它:
curl -XPOST 'localhost:9200/test-idx/_refresh'
现在我可以使用通配符查询并找到QNMZ-1900:
curl 'localhost:9200/test-idx/doc/_search?pretty=true' -d '{
"query": {
"wildcard" : { "foo" : "QNMZ-19*" }
}
我的问题:
如何使用小写搜索词运行通配符查询?
我试过了:
curl -XDELETE 'localhost:9200/test-idx'
curl -XPUT 'localhost:9200/test-idx' -d '{
"mappings": {
"doc": {
"properties": {
"foo" : {
"type": "string",
"index": "not_analyzed",
"filter": "lowercase"
}
}
}
}
}'
curl -XPUT 'localhost:9200/test-idx/doc/1' -d '{"foo": "QNMZ-1900"}'
curl -XPOST 'localhost:9200/test-idx/_refresh'
但我的小写查询:
curl 'localhost:9200/test-idx/doc/_search?pretty=true' -d '{
"query": {
"wildcard" : { "foo" : "qnmz-19*" }
}
}'
什么也没找到。
如何解决?
【问题讨论】:
-
通配符查询不是默认不分析的吗?
标签: search autocomplete elasticsearch