2017-06-01 3 views
0

terms.letter_scoreの目的の結果を返さないこの弾性クエリがあります。インデックスに一致するものがあると確信しています。このクエリー(letter_scoreを除く)は、フィルタリングされた結果は返されますが、letter_scoreは返されません。唯一の違いは(私が知る限り)cat_idの値は整数と文字列のリストであるということです。ここで何が問題になるのでしょうか?私は基本的にそれをletter_scoreリストからの任意の値に一致させるようにしようとしています。用語クエリが文字列のリストの結果を返しません

おかげ

{ 
    "size": 10, 
    "query": { 
     "bool": { 
     "filter": [ 
      { 
       "terms": { 
        "cat_id": [ 
        1, 
        2, 
        4 
        ] 
       } 
      }, 
      { 
       "terms": { 
        "letter_score": [ 
        "A", 
        "B", 
        "E" 
        ] 
       } 
      } 
     ] 
     } 
    } 
} 

答えて

1

あなたletter_scoreフィールドがタイプtextであり、したがって、トークンABEabeのでtermsとして格納されているので、分析されているように聞こえますクエリはそれらと一致しません。

また、トークンがストップワードであり、standardアナライザ(デフォルト)が(ES 5+を使用している場合)無視するため、トークンaがインデックス時に無視される可能性が高くなります。

最初のアプローチは、このように、代わりにtermsmatchクエリを使用することです:それはまだ動作しない場合

{ 
    "match": { 
     "letter_score": "A B E" 
    } 
} 

、私は(あなたがkeywordにごletter_scoreフィールドのマッピングを変更することを示唆している必要がありあなたのデータのインデックスを再作成してください)、今のようにクエリが機能します

関連する問題