我有这个疑问(通过PHP客户端)的ElasticSearch 6.2:
[
"query"=> [
"bool" => [
"filter" => [
"term" => [ "row.name" => $name ],
"term" => [ "row.origin" => $origin ]
]
]
],
"size" => "10"
]
它的工作原理,如果我用两种row.name
或row.origin
只是一个搜索,但兼具它就像一个OR并返回所有结果。我怎样才能进行过滤,只返回是row.name
和row.origin
精确匹配的文件
你把正确的方式,但我猜你错过了括号。
代替:
[
"query"=> [
"bool" => [
"filter" => [
"term" => [ "row.name" => $name ],
"term" => [ "row.origin" => $origin ]
]
]
],
"size" => "10"
]
你应该有:
[
"query"=> [
"bool" => [
"filter" => [
["term" => [ "row.name" => $name ]],
["term" => [ "row.origin" => $origin ]]
]
]
],
"size" => "10"
]
在你的情况您创建了一个地图有两个相同(term
)键:
[
"term" => [ "row.name" => $name ],
"term" => [ "row.origin" => $origin ]
]
所以第二term
推翻了第一个,在现实中,你送:
[
"term" => [ "row.origin" => $origin ]
]
送你需要那么他们将被视为一个列表中选择多个term
过滤器:
[
["term" => [ "row.name" => $name ]],
["term" => [ "row.origin" => $origin ]]
]