Подтвердить что ты не робот

Определение анализатора при запросе в elasticSearch

Я новичок в поиске elastics и просто нуждаюсь в некоторых разъяснениях: Можем ли мы определить анализатор при запросе на поисковый сервер. Я попробовал его с запросом "текст" и "поле", и он отлично работает:

Query:

curl -XPOST http://localhost:9200/test/user/_search? -d '{ "query" : {
"text" : {"_all" : {"query" :"Vaibhav","analyzer" :
"lowercase_keyword" }} } }'

Результат:

{"took":144,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.10848885,"hits":{"_index":"test","_type":"user","_id":"1","_score":0.10848885,
"_source" : {
   "first_name": "Vaibhav",
   "last_name":"saini",
   "password":"pwd"

Но когда я пытаюсь сделать то же самое с запросом term/prefix/wildcard, я получаю исключение:

Запрос:

curl -XPOST http://localhost:9200/test/user/_search? -d '{
"query" : { "term" : {"_all" : {"query" :"Vaibhav","analyzer" :
"lowercase_keyword" }} } }'

Результат:

{"error":"SearchPhaseExecutionException[Failed to execute phase [query], total failure; shardFailures
{[kws9J6tbQtWCMNKBm3Gpkw][test][4]: SearchParseException[[test][4]:
from[-1],size[-1]: Parse Failure [Failed to parse source
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\"
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested:
QueryParsingException[[test] [term] query does not support [query]];
}{[kws9J6tbQtWCMNKBm3Gpkw][test][1]: SearchParseException[[test][1]:
from[-1],size[-1]: Parse Failure [Failed to parse source
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\"
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested:
QueryParsingException[[test] [term] query does not support [query]];
}{[kws9J6tbQtWCMNKBm3Gpkw][test][2]: SearchParseException[[test][2]:
from[-1],size[-1]: Parse Failure [Failed to parse source
[\n{\n\"query\" : {\n\"term\" : {\"_all\" : {\"query\"
:\"Vaibhav\",\"analyzer\" : \"lowercase_keyword\" }}\n}\n}]]]; nested:
QueryParsingException[[test] [term] query does not support [query]];
}]","status":500}

Итак, как мы не можем определить аналайзеры при запросе сервера elasticsearch для некоторых типов запросов и для других, которые мы можем? Если нет, я делаю что-то неправильно?

Любая помощь очень ценится.

4b9b3361

Ответ 1

Запросы term, prefix и wildcard ожидают, что значение, указанное в запросе, будет уже проанализировано.

Ответ 2

Этот синтаксис работал у меня:

GET /_search
{
  "query": {
    "match_phrase": {
      "controller": {
        "analyzer": "keyword",
        "query": "api/v2/test"
      }
    }
  }
}

Найдите более подробную информацию в документации.

Ответ 3

Вы можете установить пользовательский search-analyzer, который будет использоваться для запросов.

Из документов:

Обычно один и тот же анализатор следует применять во время индекса и при времени поиска, чтобы условия в запросе находились в том же формате, что и члены в инвертированном индексе.

Иногда, однако, имеет смысл использовать другой анализатор при поиске времени, например, при использовании анализатора-указателя-вектора для автозаполнения.

По умолчанию запросы будут использовать analyzer, определенные в сопоставлении полей, но это можно переопределить с помощью параметра search_analyzer

В документах также приведен пример. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html