Новичок в Elasticsearch и попытка получить лучшее понимание различий между этими запросами. Насколько я могу судить, term
совпадает с одним термином (должен совпадать строчный регистр, чтобы совпадение работало?), А match phrase
и query string
совпадают со строкой текста.
Elasticsearch: разница между "Term", "Match Phrase" и "Query String"
Ответ 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\""
}
}
}
Говорить о различных вариантах этих запросов можно гораздо больше, пожалуйста, взгляните на соответствующую документацию:
Надеюсь, что это достаточно ясно, и это поможет.
Ответ 2
Я думаю, что кто-то определенно ищет различия между ними в отношении ЧАСТИЧНОГО ПОИСКА Вот мой анализ с стандартным стандартным анализатором ': -
Предположим, имеются данные: -
{ "name": "Hello" }
Теперь, если мы хотим сделать частичный поиск с помощью ell???
Запрос запроса или запрос соответствия
{"term":{"name": "*ell*" }
Не будет работать, вернемся.
{"term":{"name": "*zz* *ell*" }
Не будет работать, вернемся.
Заключение - Term или Match не могут выполнять частичный поиск вообще
wildcard Query: -
{"wildcard":{"name": "*ell*" }
Будет ли работать результат { "name": "Hello" }
{"wildcard":{"name": "*zz* *ell*" }
Не будет работать, вернемся.
Заключение - подстановочный знак способен выполнять частичный поиск только с одним токеном
Query_string: -
{"query_string": {"default_field": "name","query": "*ell*"}
Будет ли работать результат { "name": "Hello" }
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
Будет работать результат { "name": "Hello" }.
Заключение - запрашивается query_string с двумя маркерами
- > здесь токены ell и zz