我在Laravel中使用弹性搜索。
所以我有返回正确结果的查询:
$results = Es::search(array(
'index' => 'testindex',
'type' => $type,
'body' => [
'query' => [
'filtered' => [
'query' => [
'match' => [
'_all' => '2015-02'
]
],
'filter' => [
'bool' => [
'must' => [
'term' => [
'type' => 11
]
],
]
]
]
],
'size' => 5,
'from' => 0
]
));
它的作用是:
输出结果是:http : //pastebin.com/icWniix4总共9条结果,这是正确的。
但是当我添加另一个必须项时,它将返回无效结果
$results = Es::search(array(
'index' => 'testindex',
'type' => $type,
'body' => [
'query' => [
'filtered' => [
'query' => [
'match' => [
'_all' => '2015-02'
]
],
'filter' => [
'bool' => [
'must' => [
'term' => [
'type' => 11
],
'term' => [
'public' => 1
]
],
]
]
]
],
'size' => 5,
'from' => 0
]
));
因此,这仅添加了“公共”一词。它的作用是:
因此,现在的结果总计为429。它会忽略“类型”项,并返回所有带有“ public” = 1的内容。但是根据文档,如果我使用MUST,则它应该与所有它们匹配。搜索结果http://pastebin.com/cVcatcyi
那么我该如何编写所需的查询呢?$查询+类型+公共
官方文档无法回答我的问题。
有什么建议吗?
这是您的麻烦点:
'must' => [
'term' => [
'type' => 11
],
'term' => [
'public' => 1
]
]
在这里,您将分配must
一个仅具有一个唯一键的关联数组的值-term
实际上被分配了两次,因此,大概只有其中一个分配会“存活”(大概是public
生存的,因为它出现在定义的最后)。最终结果是must
指向仅具有一个键值对的关联数组。
我怀疑您要做的是:
'must' => [
[
'term' => [
'type' => 11
]
],
[
'term' => [
'public' => 1
]
]
]
现在must
实际上是指向一个包含两个项目的数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句