Как мне написать поисковый запрос, который выполняет несколько задач в Elasticsearch? - PullRequest
0 голосов
/ 29 октября 2019

Я прочитал документацию Elasticsearch. Я также взял курс. У меня вопрос: как мне написать один запрос для решения всех моих задач? Я учусь на примере. Документация не имеет много примеров. Я написал то, что, как мне кажется, может быть, как я выполняю эту задачу, но я не уверен, что я делаю это правильно.

... где я бы поставил какой-то запрос на совпадение

{
    "query": { 
        "bool": {
            "should": [
                {
                    "bool": {
                        "must": {
                            ...
                        },
                        "should": {
                            ...
                        }
                    }
                },
                {
                    "bool": {
                        "query_string": {
                            ...
                        }
                    }
                },
                {
                    "bool": {
                        ...
                    }
                },
                {
                "bool": {
                    "must": {
                        ...
                    },
                    "should": {
                        ...
                    }
                }
                }
            ],
            "minimum_should_match": 1
        }
    }
}

Это как я бы это сделал?

1 Ответ

0 голосов
/ 30 октября 2019

Запрос bool содержит массив [must, filter, must, mustnot], поэтому вам не нужно помещать в него еще один bool. Конечно, внутри каждого из них вы можете написать еще один запрос bool.

Когда вы добавляете minimal_should_match, вы правы, вы должны поместить его сразу после обязательной части. Ваш запрос должен выглядеть следующим образом:

{
    "query": { 
        "bool": {
             "should": [
                { "query_string" : ... },
                { "terms" : ... },
                { "bool" : ... },
                { "bool" : {
                        "must": [
                            {"query_string": ... },
                            {"bool": ....}
                        ]
                    }
                }
             ],
             "minimum_should_match": 1
        }
    }
}

У вас есть хороший пример здесь: https://www.compose.com/articles/elasticsearch-query-time-strategies-and-techniques-for-relevance-part-i/

https://hdmetor.github.io/how-to-combine-queries-in-es/

...