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\""
}
}
}
О различных вариантах выполнения этих запросов можно сказать гораздо больше, пожалуйста, ознакомьтесь с соответствующей документацией:
Надеюсь, это достаточно ясно и поможет.