【问题标题】:Combine range and must filter in elasticsearch结合范围和必须在弹性搜索中过滤
【发布时间】:2016-02-13 01:58:21
【问题描述】:

我在使用 ElasticSearch 时遇到了一些问题。我是新手,所以很正常。 我需要在我的网站上配置搜索。我有一些视频,并且有一些过滤器可以减少显示的结果。 我有完全匹配过滤器,但也有范围过滤器。

所以我的问题是根据用户搜索的内容将搜索关键字与这些过滤器结合起来。

到目前为止,我已经将搜索到的关键字与范围过滤器结合起来,但如果设置了完全匹配过滤器,我不知道该怎么做。

下面是参数现在如何传送到 Elasticsearch:

[body] => Array
        (
            [query] => Array
                (
                    [filtered] => Array
                        (
                            [query] => Array
                                (
                                    [multi_match] => Array
                                        (
                                            [query] => messi
                                            [fields] => Array
                                                (
                                                    [0] => title
                                                    [1] => duration
                                                    [2] => id_category
                                                    [3] => id_tag
                                                )

                                            [fuzziness] => 0.5
                                        )

                                )

                            [filter] => Array
                                (
                                    [range] => Array
                                        (
                                            [duration] => Array
                                                (
                                                    [gte] => 0
                                                    [lte] => 300
                                                )

                                        )

                                )

                        )

                )

        )

如果我有过滤器只显示视频,在某些类别中匹配关键字“messi”,持续时间在 0 到 300 秒之间,它会是什么样子?

感谢您的建议!

【问题讨论】:

    标签: php elasticsearch filter range


    【解决方案1】:

    看看Bool Query。我建议您将多匹配查询放在必须部分中,并将过滤器移动到(非常明显的)过滤器部分。因此,ES 将基于多重匹配计算相关性分数,但将其与过滤器的可缓存性相结合。一个简短的例子:

    <?php
    
    $query = [
        'body' => [
            'query' => [
                'bool' => [
                    'must' => [
                        [
                            'multi_match' => []
                        ],
                        ...
                    ],
                    'filter' => [
                        [
                            'range' => []
                        ],
                        ...
                    ]
                ]
            ]
        ]
    ];
    

    【讨论】:

      猜你喜欢
      • 2021-02-04
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      相关资源
      最近更新 更多