带有布尔的弹性搜索过滤器查询返回无效结果

可视化

我在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
    ]
));

它的作用是:

  • 在所有字段中搜索$ query并且
  • 字段“类型”必须为11。

输出结果是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
    ]
));

因此,这仅添加了“公共”一词。它的作用是:

  • 在所有字段中搜索$ query并且
  • 字段“类型”必须为11 AND
  • 字段“ public”必须为1

因此,现在的结果总计为429。它会忽略“类型”项,并返回所有带有“ public” = 1的内容。但是根据文档,如果我使用MUST,则它应该与所有它们匹配。搜索结果http://pastebin.com/cVcatcyi

那么我该如何编写所需的查询呢?$查询+类型+公共

官方文档无法回答我的问题。

有什么建议吗?

chang

这是您的麻烦点:

                    'must' => [
                        'term' => [
                            'type' => 11
                        ],
                        'term' => [
                            'public' => 1
                        ]
                    ]

在这里,您将分配must一个仅具有一个唯一键的关联数组的值-term实际上被分配了两次,因此,大概只有其中一个分配会“存活”(大概是public生存的,因为它出现在定义的最后)。最终结果是must指向仅具有一个键值对的关联数组。

我怀疑您要做的是:

                    'must' => [
                        [
                            'term' => [
                                'type' => 11
                            ]
                        ],
                        [
                            'term' => [
                                'public' => 1
                            ]
                        ]
                    ]

现在must实际上是指向一个包含两个项目的数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

弹性搜索 更像这个带有过滤器的查询是添加结果

弹性搜索基于日期的嵌套查询过滤器未返回正确的结果

弹性搜索中的查询与过滤器

PHP Elasticsearch,带有过滤器的布尔查询未获得任何结果

弹性搜索:使用过滤器并应查询布尔值

带有多个过滤器的Elasticsearch搜索查询

使用术语过滤器的弹性搜索过滤查询

弹性搜索过滤器/查询中的多个 bool 子句

弹性搜索地理位置查询过滤器

在弹性搜索中使用带有过滤器的聚合

带有过滤器的多个字段的弹性搜索分组

返回页面时,带有过滤器搜索页面的Flutter不断从查询中添加相同的列表视图

弹性搜索,最有效的布尔映射过滤器,即选择所有true / false

弹性搜索过滤器聚合,每个存储桶中都有多个过滤器

布尔过滤器不只显示弹性搜索中的过滤数据

弹性搜索嵌套过滤器

如何使带有手风琴的搜索过滤器也通过内部内容显示结果?

即使过滤器参数无效,rethinkdb'或'过滤器仍返回结果

目录搜索过滤器未返回任何结果

带有RecyclerView过滤的SearchView过滤器,结果错误

因为带有mybatis和spring的搜索过滤器会返回整个表

ElasticSearch 5.1 带有多重过滤器的过滤查询

Django | 查询过滤器返回的结果超出预期

Elasticsearch Bool过滤器查询返回结果

Django过滤器返回以输入的查询开头的结果

LINQ查询过滤器未返回正确数量的结果

为什么我的graphQL查询返回没有“ where”过滤器的结果?

弹性搜索。嵌套网络:弹性属性的术语过滤器

在带有Cards的RecyclerView上添加搜索过滤器?