簡體   English   中英

合並范圍並且必須在Elasticsearch中過濾

[英]Combine range and must filter in elasticsearch

我在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秒之間的關鍵字“ messi”與之匹配,該怎么辦?

謝謝!

看看Bool Query 我建議您將多匹配查詢放在must部分中,然后將過濾器移至(非常明顯的)過濾器部分。 因此,ES將基於多重匹配計算相關性得分,但會將其與過濾器的可緩存性結合起來。 一個簡短的例子:

<?php

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM