在elasticsearch中,我正在构造一个经过过滤的查询,以查找包含的文档--一个短语和一个术语。以下查询不起作用。它似乎返回查询数组中的项的结果,但是好像有一个“或”运算符被应用了。
编辑:由于我使用的是PHP,下面的示例是php数组。
'query' => [
'filtered' => [
'query' => [
'match' => [
"post_content" => [
'query' => ['ambulance services', 'veteran'],
'operator' => 'and',
'type' => 'phrase'
]
]
],
'filter' => [
...
]
]
]发布于 2015-09-30 21:45:08
在此之前,我从未见过match查询的语法,您可以像以前一样为查询提供数组。但是我在0.90版中尝试了这一点,并看到它只是返回了第二个字符串的结果。所以使用JSON,我尝试的是这样的东西:
{
"query" : {
"filtered" : {
"query" : {
"match" : {
"post_content" : {
"query" : [ "test string 1", "test string 2" ]
}
}
}
}
}
}如果您引用匹配查询文档,则and运算符确保所有术语都在post_content字段中,而不考虑术语的位置。我认为匹配查询可以归结为一个bool查询,其中查询中的每个术语都由一个子句表示。所以操作员没有完全按照你的要求去做。
我认为以下几点对你想要的都有帮助:
{
"query" : {
"bool" : {
"should" : [
{
"match" : {
"post_content" : {
"type" : "phrase",
"query" : "ambulance services"
}
}
},
{
"match" : {
"post_content" : {
"query" : "veteran"
}
}
}
],
"minimum_should_match" : 2
}
}
}https://stackoverflow.com/questions/32875765
复制相似问题