elasticsearch,filter,range,Php,elasticsearch,Filter,Range" /> elasticsearch,filter,range,Php,elasticsearch,Filter,Range" />

Php 组合范围和必须在elasticsearch中过滤

Php 组合范围和必须在elasticsearch中过滤,php,elasticsearch,filter,range,Php,elasticsearch,Filter,Range,我对ElasticSearch有一些问题。我是新手,所以这很正常。 我的需要是在我的网站上配置搜索。我有一些视频和一些过滤器,以减少显示的结果。 我有精确匹配过滤器,但也有范围过滤器 因此,我的问题是根据用户搜索的内容,将搜索关键字与这些过滤器结合起来 到目前为止,我已经将搜索的关键字与范围过滤器相结合,但是如果设置了精确的匹配过滤器,我不知道该怎么做 以下是参数如何转到Elasticsearch: [body] => Array ( [query]

我对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
                                                )

                                        )

                                )

                        )

                )

        )
如果我用过滤器只显示视频,并在某些类别中匹配持续时间在0到300秒之间的关键词“梅西”,那会是什么样子

这是忠告

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

<?php

$query = [
    'body' => [
        'query' => [
            'bool' => [
                'must' => [
                    [
                        'multi_match' => []
                    ],
                    ...
                ],
                'filter' => [
                    [
                        'range' => []
                    ],
                    ...
                ]
            ]
        ]
    ]
];
看一下。我建议您将多重匹配查询放在“必须”部分,并将过滤器移动到(非常明显的)过滤器部分。因此,ES将基于多重匹配计算相关性分数,但将其与过滤器的可缓存性相结合。举个简单的例子:

<?php

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