term
запрос соответствует одному термину как есть: значение не анализируется . Таким образом, это не обязательно должно быть в нижнем регистре в зависимости от того, что вы проиндексировали.
Если вы предоставили Bennett
во время индексации и значение не проанализировано, следующий запрос ничего не вернет:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
query проанализирует входные данные, если для запрашиваемого поля определены анализаторы, и найдет документы, соответствующие следующим критериям:
- все термины должны появиться в поле
- они должны иметь тот же порядок, что и входное значение
Например, если вы индексируете следующие документы (с помощью standard
анализатора поля foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
Этот match_phrase
запрос вернет только первый и второй документы:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
поиск по запросу, по умолчанию, по полю _all, которое содержит текст сразу нескольких текстовых полей. Кроме того, он анализируется и поддерживает некоторые операторы (И / ИЛИ ...), подстановочные знаки и так далее (см. Соответствующий синтаксис ).
В качестве match_phrase
запросов ввод анализируется в соответствии с анализатором, установленным в запрашиваемом поле.
В отличие от match_phrase
, термины, полученные после анализа, не обязательно должны быть в том же порядке, если только пользователь не использовал кавычки вокруг ввода.
Например, используя те же документы, что и раньше, этот запрос вернет все документы:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Но этот запрос вернет те же 2 документа, что и match_phrase
запрос:
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
О различных вариантах выполнения этих запросов можно сказать гораздо больше, пожалуйста, ознакомьтесь с соответствующей документацией:
Надеюсь, это достаточно ясно и поможет.
match
запрос использовать анализатор, если поле анализируется, так что да. По умолчанию он возвращает документы, содержащие хотя бы один из терминов (см. Параметрoperator
), и порядок не важен.Я думаю, что кто-то определенно ищет различия между ними в отношении ЧАСТИЧНОГО ПОИСКА Вот мой анализ со стандартным анализатором по умолчанию : -
{"name": «Привет»}
Что, если мы хотим выполнить частичный поиск с помощью ell ???
Не получится, отметив в ответ.
Не получится, отметив в ответ.
Заключение - Term or Match вообще не может выполнять частичный поиск
Будет работать даст результат {"name": "Hello"}
Не получится, отметив в ответ.
Заключение - подстановочный знак может выполнять частичный поиск только с одним токеном
Будет работать даст результат {"name": «Hello»}
Поработать даст результат {"name": «Hello»}.
Вывод - query_string умеет искать с двумя указанными токенами
-> здесь токены ell и zz
источник
wildcard is able to do partial search with one token only
: точнее,wildcard
запросы по умолчанию работают только сkeyword
полями , которые по определению одноларкерные. Это не имеет ничего общего с содержимым поля, состоящим более чем из одного слова. В вашем запросе с подстановочными знаками будет соответствовать "ozzy hello".