2017-02-13 16 views
1

The linkは、多値フィールドでフレーズマッチングを使用すると不思議なことが起こる可能性があると言います。しかし私の場合、フレーズマッチングは多値フィールドと一致しませんでした。不思議なことは起こらなかった。 作成と検索:コード内のフレーズがマルチバリューフィールドと一致しないのはなぜですか?

curl -XPUT http://localhost:9200/my_index/groups/1 -d ' 
{ 
    "names": [ "John Abraham", "Lincoln Smith"] 
} 
' 

curl -XGET http://localhost:9200/my_index/groups/_search -d ' 
{ 
    "query": { 
     "match_phrase": { 
      "names": "Abraham Lincoln" 
     } 
    } 
} 
' 

応答:私は間違っているところ

{ 

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

} 

わかりませんか?チュートリアルのように結果を得ることができないのですか?任意のヘルプ/ポインタは非常に感謝しています。

注:このスクリプトは、Elasticsearch 2.1.1、2.4.4、および5.0.1で実行しています。すべての結果は同じです。

+0

match_allクエリを実行して、データが確実に存在するかどうかを確認してください –

答えて

1

あなたが参照しているリンクは、ES 5.xの「Definitive guide to ES 2.x」への古いリンクですが、まだ更新されていません。

{ 
    "tokens": [ 
     { 
     "token": "john", 
     "start_offset": 0, 
     "end_offset": 4, 
     "type": "<ALPHANUM>", 
     "position": 0 
     }, 
     { 
     "token": "abraham", 
     "start_offset": 5, 
     "end_offset": 12, 
     "type": "<ALPHANUM>", 
     "position": 1 
     }, 
     { 
     "token": "lincoln", 
     "start_offset": 13, 
     "end_offset": 20, 
     "type": "<ALPHANUM>", 
     "position": 102 
     }, 
     { 
     "token": "smith", 
     "start_offset": 21, 
     "end_offset": 26, 
     "type": "<ALPHANUM>", 
     "position": 103 
     } 
    ] 
} 
(第3項及び第4項の位置を参照)

POST my_index/_analyze 
{ 
    "text": [ "John Abraham", "Lincoln Smith"], 
    "field": "names" 
} 

これを生成します。official documentation on position_increment_gapは、デフォルト値は100

であるあなたはまた_analyzeエンドポイントを押すことで、これを見ることができることに言及します

あなたは100のスロップを追加した場合ので、あなたは試合を見つけることができます:

POST my_index/groups/_search 
{ 
    "query": { 
     "match_phrase": { 
     "names": { 
      "query": "Abraham Lincoln", 
      "slop": 100 
     } 
     } 
    } 
} 
関連する問題