2017-07-25 10 views
0

私は正しいフィルタを設定するには、問題をしたため、正しいフィルタを作成することはできません。クエリは次のようになります。は私のelasticsearchクエリ

{ 
    "query" : { 
     "bool" : { 
      "must" : [ 
       { 
        "query_string" : { 
         "query" : "example~", 
         "analyzer" : "standard", 
         "default_operator" : "OR", 
         "fuzziness" : "AUTO" 
        } 
       }, 
       { 
        "term" : { 
         "client" : { 
          "value" : "MyClient", 
          "boost" : 1 
         } 
        } 
       }, 
       { 
        "range" : { 
         "dateCreate" : { 
          "gte" : "2016-01-01T00:00:00+0200", 
          "lte" : "2016-12-31T23:59:59+0200" 
         } 
        } 
       }, 
       { 
        "match" : { 
         "lang" : "php OR java" 
        } 
       } 
      ] 
     } 
    }, 
    "size" : 10, 
    "from" : 0, 
    "sort" : [ 
     { 
      "_score" : { 
       "order" : "desc" 
      } 
     } 
    ] 
} 

"lang"フィールドはテキストタイプです。
私の期待は、与えられたクエリ文字列を持つすべての文書を取得することですし、私は彼らのLANGフィールドに「PHP」または「ジャワ」を持つ文書のみを選択します。 langフィールドには「PHP」または「Java」のいずれかしか含まれていませんが、両方の文字列が含まれていないので、正確なマッチングを使用することを考えましたが、動作させることはできません。
結果は実際には2つの文書のリストですが、total_count = 2510です。一致していない私の文書の

一つは:

{ 
    "id" : "d3295f18-a033-4934-941a-21a8bef901e8", 
    "client" : "MyClient", 
    "lang" : "PHP", 
    "author" : null, 
    "dateCreate" : "2016-03-31T00:00:00+0200", 
    "title" : "Sample document", 
    "content" : "This is a short text describing the deocument." 
} 
+0

あなたは 'OR'を削除するとどうなりますか? – Val

+0

まったく同じ:私は2つの結果を得ていますが、リストには約2,000の文書が必要です。 – altralaser

+0

一致するはずのサンプルドキュメントを表示できますか?ドキュメントのマッピングも表示できますか? – Val

答えて

0

はい、クライアントフィールドはtext型でもあります。

clientフィールドには、用語のクエリを使用するか、termからmatchに、クライアントのクエリを変更するkeywordタイプのいずれかである必要があります:

{ 
    "match" : { 
     "client" : { 
      "query" : "MyClient", 
      "boost" : 1 
     } 
    } 
} 
+0

しかし、これは私の問題を解決しません。 – altralaser

+0

私は何をしますか - 'lang'フィールドの単一のマッチがうまくいくならば、' range'クエリと最初に 'term'などを組み合わせて問題の原因となっている組み合わせを見つけようとします。マッピングを表示して、クエリに適切に返されたドキュメントを表示することもできます。問題を再作成する方がはるかに簡単です。 – Joanna