2016-08-30 116 views
0

我有以下Elasticsearch,版本2.3,查詢產生零結果。從上面的查詢多重匹配短語前綴在Elasticsearch中返回零結果

{ 
    "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

我能夠通過更改電話號碼查詢到regexp查詢,而不是match_phrase_prefix查詢得到我想要的結果。

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "regexp": { 
      "phone": "123[0-9]+" 
      } 
     }, 
     { 
      "match_phrase_prefix": { 
      "firstname": "First" 
      } 
     } 
     ] 
    } 
    } 
}