Ответ 1
term
запрос соответствует одному термину как таковому: значение не анализируется.
Таким образом, он не должен быть уменьшен в зависимости от того, что вы проиндексировали.
Если вы указали Bennett
во время индекса и значение не проанализировано, следующий запрос ничего не вернет:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
запрос будет анализировать ввод, если анализаторы определены для запрашиваемого поля и найти документы, соответствующие следующим критериям:
- все термины должны появиться в поле
- они должны иметь тот же порядок, что и входное значение
Например, если вы индексируете следующие документы (используя анализатор 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, которое содержит текст нескольких текстовых полей одновременно. Кроме того, он анализируется и поддерживает некоторые операторы (AND/OR...), подстановочные знаки и т.д. (См. связанный синтаксис).
В качестве запросов match_phrase
вход анализируется в соответствии с набором анализатора в запрошенном поле.
В отличие от match_phrase
, термины, полученные после анализа, не должны быть в том же порядке, если только пользователь не использовал кавычки вокруг ввода.
Например, используя те же документы, что и раньше, этот запрос возвращает все документы:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Но этот запрос вернет те же 2 документа, что и запрос match_phrase
:
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
Говорить о различных вариантах этих запросов можно гораздо больше, пожалуйста, взгляните на соответствующую документацию:
Надеюсь, что это достаточно ясно, и это поможет.