Elasticsearch — выбор анализатора для использования с полями

#elasticsearch #search #elasticsearch-dsl

#эластичный поиск #Поиск #elasticsearch-dsl

Вопрос:

Как мне определить query_string , какой анализатор использовать при поиске?

Я создал свой индекс с помощью анализатора следующим образом:

 "analysis": {
  "analyzer": {
    "std_analyzer": {
      "tokenizer": "whitespace",
      "filter": [ "stemmer" ]
    }
  }
}
 

Я не предопределяю никаких сопоставлений. Вместо этого я полагаюсь на то, что сопоставления будут динамически добавляться при вставке документа.

Сопоставления отображаются следующим образом после вызова /my_index/_mapping

       "short_bio" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
 

Вы увидите, что при динамическом добавлении поля анализатор не определен в сопоставлении.

Означает ли это, что поиск будет автоматически использовать анализатор, созданный с помощью index ( std_analyzer )? Или используется какой-то другой анализатор? Как мне заставить его использовать анализатор, который я хочу?

Если это уместно, я ищу, используя query_string , чтобы воспользоваться преимуществами И / ИЛИ / НЕ / группировки

Спасибо!

Ответ №1:

Пожалуйста, обратитесь к объяснению анализатора строки запроса из официальных документов

(Необязательно, строковый) анализатор, используемый для преобразования текста в строке запроса в токены. По умолчанию используется анализатор времени индексации, сопоставленный для default_field. Если анализатор не сопоставлен, используется анализатор индекса по умолчанию.

Это означает, что в вашем случае, поскольку вы не определили какой-либо явный анализатор, строка запроса будет использовать стандартный анализатор для текстовых полей и ключевое слово, известное как анализатор без операций для keyword полей.

Также не путайте с анализатором index по умолчанию, вы можете просто проверить это, перейдя по этой официальной ссылке.

Также, как упоминалось в документах, строка запроса возвращает ошибки из-за недопустимого синтаксиса, и ваш вариант использования AND / OR / NOT может быть легко обработан предпочтительным логическим запросом

Комментарии:

1. @Elasticsearch_Ninja еще раз спасибо! Именно то, что я искал! Также спасибо за ссылку на логические запросы. Я посмотрю