2017-10-10 49 views
0

你好,我有以下查詢,我運行:彈性 - 多重過濾器的查詢語法

{ 
    "_source": [ 
    "source1", 
    "source2", 
    "source3", 
    "source4", 
    ], 
    "query": { 
    "bool": { 
     "minimum_should_match": 1, 
     "must": { 
     "filter": [ 
      { 
      "term": { 
       "_type": { 
       "value": "someval1" 
       } 
      } 
      }, 
      { 
      "term": { 
       "_type": { 
       "value": "someval2" 
       } 
      } 
      } 
     ], 
     "query_string": { 
      "analyze_wildcard": "true", 
      "query": "tesla*", 
      "rewrite": "scoring_boolean" 
     } 
     } 
    } 
    }, 
    "size": 50, 
    "sort": [ 
    "_score" 
    ] 
} 

當前返回:

'"reason":"[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":343},"status":400}' 

任何想法如何在查詢中使用多個過濾器?我能夠在彈性2.4上做到這一點,但由於OR現在已被棄用和過濾,所以我有點失落。

謝謝!

回答

1

查詢的語法錯誤。 filter不應包含在must聲明中。它應該與must處於同一水平。還有bool查詢must語句應該是一個數組,而不是一個對象。因此,您的查詢應該是這樣的

{ 
    "_source":[ 
     "source1", 
     "source2", 
     "source3", 
     "source4" 
    ], 
    "query":{ 
     "bool":{ 
      "minimum_should_match":1, 
      "must":[ 
      { 
       "query_string":{ 
        "analyze_wildcard":"true", 
        "query":"tesla*", 
        "rewrite":"scoring_boolean" 
       } 
      } 
      ], 
      "filter":{ 
      "bool":{ 
       "should":[ 
        { 
         "term":{ 
         "_type":{ 
          "value":"someval1" 
         } 
         } 
        }, 
        { 
         "term":{ 
         "_type":{ 
          "value":"someval2" 
         } 
         } 
        } 
       ] 
      } 
      } 
     } 
    }, 
    "size":50, 
    "sort":[ 
     "_score" 
    ] 
} 

我覺得你的過濾器是OR,這就是爲什麼我把它包裏面should

+0

這工作。謝謝! – Bryce