Отфильтровать контекст для запроса в elasricsearch?

У меня есть обязательный запрос, который выглядит так:

{
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "section": {
                        "query": "word1",
                        "boost": "3"
                    }
                }
            }, {
                "match": {
                    "section": {
                        "query": "word2",
                        "boost": "4"
                    }
                }
            }]
        }
    }
}

Как я могу сделать это «ИЛИ», то есть все документы, которые соответствуют «слову1», «слову2» или обоим, потому что приведенный выше код дает мне результаты в документах, которые содержат как «слово1», так и «слово2».

Я прочитал в документацию, что этого можно добиться, используя должен в контексте фильтра, но я не смог найти ни одного примера.

Спасибо


person anshaj    schedule 13.05.2017    source источник
comment
Просто замените must на should, и вы получите то, что ожидаете.   -  person Val    schedule 13.05.2017


Ответы (1)


Вы должны использовать блок should вместо must. Вот правильный запрос

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "section": {
                            "query": "word1",
                            "boost": "3"
                        }
                    }
                },
                {
                    "match": {
                        "section": {
                            "query": "word2",
                            "boost": "4"
                        }
                    }
                }
            ]
        }
    }
}

Что касается блока filter, он вернет те же документы, что и must, но не повлияет на окончательный результат.

person Random    schedule 13.05.2017
comment
И установите minmum_should_match: 1 для совпадения хотя бы в одном случае. - person Mohammad Mazraeh; 15.05.2017
comment
Не нужно, если нет условий must и filter - person Random; 15.05.2017