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