Многие должны с multi_match - PullRequest
1 голос
/ 27 марта 2020

У меня есть этот запрос:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "egyik": {
                            "query": "piros alma"
                        }
                    }
                },
                {
                    "match": {
                        "masik": {
                            "query": "piros alma"
                        }
                    }
                }
            ]
        }
    }
}

Это не слишком красиво, потому что параметр запроса встречался дважды, поэтому я попытался переписать его с синтаксисом multi_match:

{
    "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "query": "piros alma",
                    "fields": [
                        "egyik",
                        "masik"
                    ]
                }
            }
        }
    }
}

Но он возвращает больше хитов, чем первый. Я пробовал оператор, Minimum_should_match модификаторы, но не помогает. Как мне решить тот же результат с multi_match?

Ответы [ 3 ]

0 голосов
/ 27 марта 2020

По умолчанию operator ИЛИ используется, что означает, что термин запроса может присутствовать в любом поле, если вы хотите, чтобы термин запроса присутствовал во всех полях, вы можете явно определить поле operator со значением AND.

{
"query": {
    "bool": {
        "must": {
            "multi_match": {
                "query": "piros alma",
                "fields": [
                    "egyik",
                    "masik"
                ],
                "operator":"and"
            }
        }
    }
}
}

Чтобы узнать больше, вы можете go через это

0 голосов
/ 27 марта 2020

Тем временем я нашел решение:

{
    "query": {
        "bool": {
            "must": {
                "multi_match": {
                    "query": "piros alma",
                    "fields": [
                        "egyik",
                        "masik"
                    ],
                    "type": "cross_fields",
                    "operator": "and"
                }
            }
        }
    }
}

Нужен тип и оператор вместе.

0 голосов
/ 27 марта 2020

Насколько мне известно, все типы запросов на множественные совпадения возвращают совпадение, когда предоставленный query соответствует любому из перечисленных field s (см. Elasti c docs ). Таким образом, причина, по которой у вас больше хитов с multi_match, заключается в том, что вы не можете применить то же логическое условие, что и в первом запросе. Тем не менее, я не вижу ничего плохого в повторении одного и того же параметра запроса дважды. Если вы хотите немного обобщить это, вы можете рассмотреть возможность использования шаблонов поиска

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...