2015-09-30 41 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 
     } 
    } 
}