我有以下Elasticsearch,版本2.3,查询产生零结果。
{
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"phone": "123"
}
},
{
"match_phrase_prefix": {
"firstname": "First"
}
}
]
}
}
}
以上查询的输出:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
使用_explain
{
"_index": "index_name",
"_type": "doc_type",
"_id": "_explain",
"_version": 4,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}
然而,当我执行以下任一操作时,我得到的结果包括与上述查询的两个部分匹配的一个文档。如果我包含完整的电话号码,则文档将显示在结果中。
电话号码存储为字符串,没有任何格式。即“1234567890”。
两个前缀查询返回零结果的原因是什么?
{
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"phone": "123"
}
}
]
}
}
}
{
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"firstname": "First"
}
}
]
}
}
}
答案 0 :(得分:0)
我可以通过将电话号码查询更改为 regexp
查询而不是 match_phrase_prefix
查询来获得我想要的结果。
{
"query": {
"bool": {
"must": [
{
"regexp": {
"phone": "123[0-9]+"
}
},
{
"match_phrase_prefix": {
"firstname": "First"
}
}
]
}
}
}