2015-10-27 1 views
1

По-видимому, я могу запросить ES со следующими подстановочными query_string:Elasticsearch query_string подстановочного синтаксиса

curl 'http://localhost:9200/my-index/_search?pretty' -d '{ 
    "query": { 
    "query_string": { 
     "query": "*:sw?ft" 
    } 
    } 
}' 

ли этот запрос на _all поле? что делает его эквивалент:

curl 'http://localhost:9200/my-index/_search?pretty' -d '{ 
    "query": { 
    "query_string": { 
     "default_field" : "_all" 
     "query": "sw?ft" 
    } 
    } 
}' 

что, если _all отключена в индексации? Я не мог найти документацию для этого.

Заранее спасибо.

ответ

1

A query_string с командой поисковой установленным на *:sw?ft будут преобразованы в нечто вроде следующего (предполагается, что ваш my-index индекс имеет один my_field поле, например):

(_field_names:sw?ft | _all:sw?ft | _index:sw?ft | _parent:sw?ft | _uid:sw?ft | _type:sw?ft | _routing:sw?ft | _version:sw?ft | _timestamp:sw?ft | _source:sw?ft | _size:sw?ft | my_field:sw?ft | _id:sw?ft | _ttl:sw?ft | _boost:sw?ft) 

Итак, подстановочные, прежде : будет расширен до всех полей индекса, а не только ваших собственных полей. Будьте очень осторожны с подстановочными знаками в query_string, они могут плохо повлиять на производительность кластера.

Таким образом, чтобы ответить на ваш вопрос, * будет расширен до всех поля индекса, в том числе _all. Если бы вы использовали только sw?ft в качестве поисковой строки, то это, по умолчанию, было бы использовано _all.

+0

Спасибо за этот фантастический ответ! Интересно, где вы находите все эти детали? –

+0

Эти данные можно найти, используя [validate API] (https://www.elastic.co/guide/en/elasticsearch/guide/current/_validating_queries.html#_understanding_queries) ;-). Это действительно полезно, особенно с 'query_string'. –

+0

ahaa! он станет моим новым другом. Благодарю. –

0

Прежде всего, это документация по запросу QUERY_STRING:

И есть ответы на оба ваши вопросы:

Когда не явное указание поля для найдите в запросе строковый синтаксис, index.query.default_field будет использован для получения , который ld для поиска. По умолчанию используется значение _all.

Итак, если поле _all отключено, возможно, имеет смысл изменить его на , установив другое поле по умолчанию.

+0

Я смущен синтаксисом «*: sw? Ft», я знаю, что могу использовать отдельное поле вместо звезды, но ищет ли звезда _all или каждое проиндексированное поле? Если звезда ищет _all, AFAIK, _all не является строчной буквой, но подстановочный шаблон query_string, поэтому это не имеет смысла. Спасибо за ваш ответ. –