在elasticsearch中,我构建了一个过滤后的查询,以便查找包含两者一个词组和一个词的文档。以下查询无效。它似乎返回查询数组中的项目的结果,但好像有一个'或'运营商应用。
编辑:由于我使用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
}
}
}