Elastic Search 7.9: точный поиск по нескольким полям

Я использую последнюю версию Elastic Search (7.9) и пытаюсь найти хороший способ выполнить запрос с несколькими терминами как AND.

По сути, я хочу:

select * where field1 === 'word' AND field2 === 'different word'

В настоящее время я использую термин для точного соответствия ключевого слова в поле field1. Но добавление во второе поле вызывает у меня некоторую дрожь.

{
    "query": {
        "term": {
            "field1": {
                "value": "word"
            }
        }
    }
}

Это мой текущий запрос, я пробовал использовать BOOL. Я встречал ответы в предыдущих версиях, где я мог бы использовать отфильтрованный запрос. Но я тоже не могу заставить это работать.

Может кто-то помочь мне, пожалуйста. Это действительно меня заводит.

РЕДАКТИРОВАТЬ

Вот что я пробовал с bool / must с несколькими терминами. Но я не получаю результатов, хотя знаю, что в этом случае этот запрос должен возвращать данные.

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "field1": {
                            "value": "word"
                        }
                    }
                },
                {
                    "term": {
                        "field2": {
                            "value": "other word"
                        }
                    }
                }
            ]
        }
    }
}

person Andy    schedule 24.08.2020    source источник
comment
Не могли бы вы добавить сопоставление, документ, который должен появиться в выходных данных, и точные значения, которые вы используете в запросе?   -  person Sahil Gupta    schedule 24.08.2020
comment
Привет, @SahilGupta, оказывается, я забыл, что типы ключевых слов чувствительны к регистру.   -  person Andy    schedule 24.08.2020
comment
аааа !!!! Иногда простые вещи отнимают слишком много времени   -  person Sahil Gupta    schedule 24.08.2020


Ответы (1)


Итак, забавный факт. Вы можете сделать bool / match, как я пробовал. Вы должны помнить, что совпадения ключевых слов (это то, что я использую) чувствительны к регистру. ES не выполняет никакого анализа или фильтрации данных, когда вы устанавливаете тип поля как ключевое слово.

Также можно использовать bool с фильтром для получения тех же результатов (когда вы учитываете тип)

{
    "query": {
        "bool": {
            "must": 
                {
                    "term": {
                        "field1": {
                            "value": "word"
                        }
                    }
                },
            "filter":
                {
                    "term": {
                        "field2": {
                            "value": "other word"
                        }
                    }
                }
        }
    }
}
person Andy    schedule 24.08.2020
comment
Ключевое слово - это хеш. По умолчанию он чувствителен к регистру, если вы не используете его в каком-либо пользовательском анализаторе. Это ваш вариант использования, запрос strickly = to select * where field1 === 'word' AND field2 === 'different word', который также чувствителен к регистру. - person Jaycreation; 24.08.2020