2016-06-23 11 views
1
GET dspdocs/_search 
{ 
"query": { 
    "filtered": { 
    "filter": { 
     "bool": { 
     "must": ["must_term1", "must_term2"], 
     "must_not": ["must_not_term", "must_not_term2"] 
     } 
     }, 
    "query": { 
     "match": { 
     "text": { 
      "query": "query_term", 
      "operator": "or" 
     } 
     } 
    } 
    } 
} 
} 

私は、上記のクエリを実行しようとしていると私は次のエラーを取得:私はこれが私のクエリは正常に書き込まれていないか、私はめちゃくちゃきたことを意味知ってろ過クエリエラー

"type": "query_parsing_exception", 
"reason": "[_na] query malformed, must start with start_object", 

を私の人生のどこかで何か注文しても、どこが間違っているのか分かりません。

私は基本的にmust条件を含んでおらず、must_not条件を含んでいないすべてのドキュメントをフィルタリングしようとしています。次に、filter_set内でquery_termを持つすべてのドキュメントを検索します。

+0

あなたは 'must_term1'と' must_not_term'の例を与えてもらえますか?それらは用語クエリか単に 'query_term'ですか? – keety

+0

これらは単なる文字列であり、以下に示すpickypgのような用語クエリに変換するために必要です。 –

答えて

3

あなたの問題は、一例である(私は少し検索の速度を上げるために最初のフィルタリングを行う):

... 
    "bool": { 
    "must": ["must_term1", "must_term2"], 
    "must_not": ["must_not_term", "must_not_term2"] 
    } 
    }, 
... 

そのためmustmust_not(とshouldfilterの配列1つのオブジェクトまたはのオブジェクトのいずれかが必要です。例えば:私はtermクエリを使用していますが、あなたは、クエリのいずれかのタイプを自由に使用している

"bool": { 
    "must": [ 
    { 
     "term" : { 
     "my_field" : "must_term1" 
     } 
    }, 
    { 
     "term" : { 
     "my_field" : "must_term2" 
     } 
    } 
    ], 
    "must_not": [ 
    { 
     "term" : { 
     "my_field" : "must_not_term" 
     } 
    }, 
    { 
     "term" : { 
     "my_field" : "must_not_term2" 
     } 
    } 
    ] 
} 

注意。 Elasticsearch 2.xの+を使用すると、のではなく、純粋なboolクエリとしてこれを書くべきfiltered 1:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string" : { 
      "query" : "query_term" 
      } 
     } 
     ], 
     "must_not": [ 
     { 
      "term" : { 
      "my_field" : "must_not_term" 
      } 
     }, 
     { 
      "term" : { 
      "my_field" : "must_not_term2" 
      } 
     } 
     ], 
     "filter": [ 
     { 
      "term" : { 
      "my_field" : "must_term1" 
      } 
     }, 
     { 
      "term" : { 
      "my_field" : "must_term2" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

ありがとうございます! –