2016-08-30 2 views
0

次のElasticsearch、バージョン2.3のクエリではゼロの結果が得られます。クエリ上から複数の一致フレーズ接頭辞は、Elasticsearchでゼロの結果を返します。

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match_phrase_prefix": { 
      "phone": "123" 
      } 
     }, 
     { 
      "match_phrase_prefix": { 
      "firstname": "First" 
      } 
     } 
     ] 
    } 
    } 
} 

出力:_explain

{ 
    "_index": "index_name", 
    "_type": "doc_type", 
    "_id": "_explain", 
    "_version": 4, 
    "_shards": { 
    "total": 2, 
    "successful": 1, 
    "failed": 0 
    }, 
    "created": false 
} 
しかし

と上記のクエリの

{ 
    "took": 3, 
    "timed_out": false, 
    "_shards": { 
    "total": 1, 
    "successful": 1, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 0, 
    "max_score": null, 
    "hits": [] 
    } 
} 

出力、私は私が一致する一つの文書を含む結果を取得するには、次のいずれかを実行するとき上記のクエリの両方の部分。完全な電話番号を含めると、結果に文書が表示されます。

電話番号は、書式設定のない文字列として保存されます。すなわち「1234567890」。

2つの接頭辞クエリがゼロの結果を返す理由は何ですか?

{ 
    "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" 
      } 
     } 
     ] 
    } 
    } 
} 
関連する問題