2015-09-30 42 views
0

在elasticsearch,我構建過濾查詢,以便找到包含一個短語長期文件。以下查詢不起作用。它似乎返回結果與查詢數組中的項目,但似乎有應用'或'運算符。Elasticseach:匹配短語和長期

編輯:由於我使用PHP,以下示例是一個php數組。

'query' => [ 
    'filtered' => [ 
     'query' => [ 
      'match' => [ 
       "post_content" => [ 
        'query' => ['ambulance services', 'veteran'], 
        'operator' => 'and', 
        'type' => 'phrase' 
       ] 
      ] 
     ], 
     'filter' => [ 
      ... 
     ] 
    ] 
] 
+0

你能張貼您的映射,以及幾樣文檔(你期望返回的那些)? –

回答

1

我從來沒有見過匹配查詢的語法,在那裏你可以提供一個像你所做的查詢數組。但是我在0.90版本中嘗試過,並且看到它只是返回第二個字符串的結果。因此,使用JSON,我的嘗試是這樣的:

{ 
    "query" : { 
     "filtered" : { 
      "query" : { 
       "match" : { 
        "post_content" : { 
         "query" : [ "test string 1", "test string 2" ] 
        } 
       } 
      } 
     } 
    } 
} 

如果你指的是match query docs,該and運營商確保所有的條款都在POST_CONTENT場沒有采取條款的立場考慮。我認爲匹配查詢只是歸結爲一個bool查詢,其中查詢中的每個術語都由一個子句表示。所以操作員不會做你想做的事情。

我想下面就爲你想要的工作:

{ 
    "query" : { 
     "bool" : { 
      "should" : [ 
       { 
        "match" : { 
         "post_content" : { 
          "type" : "phrase", 
          "query" : "ambulance services" 
         } 
        } 
       }, 
       { 
        "match" : { 
         "post_content" : { 
          "query" : "veteran" 
         } 
        } 
       } 
      ], 
      "minimum_should_match" : 2 
     } 
    } 
}