我在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
那么如何编写我需要的查询呢? $ query + type + public
官方文件未能回答我的问题。
有什么建议吗?
答案 0 :(得分:1)
这是你的麻烦点:
'must' => [
'term' => [
'type' => 11
],
'term' => [
'public' => 1
]
]
在这里,您将must
的值指定为只有一个不同键的关联数组 - term
实际上被分配了两次,因此可能只有一个分配将“存活”(大概public
幸存下来,因为它出现在定义的最后)。最终结果是must
最终指向只有一个键值对的关联数组。
我怀疑你必须这样做:
'must' => [
[
'term' => [
'type' => 11
]
],
[
'term' => [
'public' => 1
]
]
]
现在must
实际上是指向一个包含两个项目的数组。