Elasticsearch - Анализ

Когда запрос обрабатывается во время операции поиска, содержимое любого индекса анализируется модулем анализа. Этот модуль состоит из анализатора, токенизатора, tokenfilters и charfilters. Если анализатор не определен, то по умолчанию встроенные анализаторы, токен, фильтры и токенизаторы регистрируются в модуле анализа.

В следующем примере мы используем стандартный анализатор, который используется, когда не указан другой анализатор. Он проанализирует предложение на основе грамматики и произведет слова, используемые в предложении.

POST _analyze
{
   "analyzer": "standard",
   "text": "Today's weather is beautiful"
}

При запуске приведенного выше кода мы получаем ответ, как показано ниже -

{
   "tokens" : [
      {
         "token" : "today's",
         "start_offset" : 0,
         "end_offset" : 7,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "weather",
         "start_offset" : 8,
         "end_offset" : 15,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "is",
         "start_offset" : 16,
         "end_offset" : 18,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 19,
         "end_offset" : 28,
         "type" : "",
         "position" : 3
      }
   ]
}

Настройка стандартного анализатора

Мы можем настроить стандартный анализатор с различными параметрами в соответствии с нашими индивидуальными требованиями.

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

Для этого сначала создаем индекс с анализатором, имеющим параметр max_length_token.

PUT index_4_analysis
{
   "settings": {
      "analysis": {
         "analyzer": {
            "my_english_analyzer": {
               "type": "standard",
               "max_token_length": 5,
               "stopwords": "_english_"
            }
         }
      }
   }
}

Далее мы применяем анализатор с текстом, как показано ниже. Обратите внимание, что маркер не отображается, поскольку в нем есть два пробела в начале и два пробела в конце. Для слова «есть» есть пробел в начале и пробел в конце. Взяв все из них, получается 4 буквы с пробелами, и это не превращается в слово. По крайней мере, в начале или в конце должен быть непробельный символ, чтобы слово было подсчитанным.

POST index_4_analysis/_analyze
{
   "analyzer": "my_english_analyzer",
   "text": "Today's weather is beautiful"
}

При запуске приведенного выше кода мы получаем ответ, как показано ниже -

{
   "tokens" : [
      {
         "token" : "today",
         "start_offset" : 0,
         "end_offset" : 5,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "s",
         "start_offset" : 6,
         "end_offset" : 7,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "weath",
         "start_offset" : 8,
         "end_offset" : 13,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "er",
         "start_offset" : 13,
         "end_offset" : 15,
         "type" : "",
         "position" : 3
      },
      {
         "token" : "beaut",
         "start_offset" : 19,
         "end_offset" : 24,
         "type" : "",
         "position" : 5
      },
      {
         "token" : "iful",
         "start_offset" : 24,
         "end_offset" : 28,
         "type" : "",
         "position" : 6
      }
   ]
}

Список различных анализаторов и их описание приведены в таблице ниже -

S.No Анализатор и описание
1

Standard analyzer (standard)

Для этого анализатора можно установить стоп-слова и max_token_length. По умолчанию список стоп-слов пуст, а max_token_length равно 255.

2

Simple analyzer (simple)

Этот анализатор состоит из токенизатора нижнего регистра.

3

Whitespace analyzer (whitespace)

Этот анализатор состоит из токенизатора пробелов.

4

Stop analyzer (stop)

Stopwords и stopwords_path можно настроить. По умолчанию стоп-слова инициализируются английскими стоп-словами, а stopwords_path содержит путь к текстовому файлу со стоп-словами.

Токенизаторы

Токенизаторы используются для генерации токенов из текста в Elasticsearch. Текст можно разбить на токены с учетом пробелов или других знаков препинания. Elasticsearch имеет множество встроенных токенизаторов, которые можно использовать в настраиваемом анализаторе.

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

POST _analyze
{
   "tokenizer": "lowercase",
   "text": "It Was a Beautiful Weather 5 Days ago."
}

При запуске приведенного выше кода мы получаем ответ, как показано ниже -

{
   "tokens" : [
      {
         "token" : "it",
         "start_offset" : 0,
         "end_offset" : 2,
         "type" : "word",
         "position" : 0
      },
      {
         "token" : "was",
         "start_offset" : 3,
         "end_offset" : 6,
         "type" : "word",
         "position" : 1
      },
      {
         "token" : "a",
         "start_offset" : 7,
         "end_offset" : 8,
         "type" : "word",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 9,
         "end_offset" : 18,
         "type" : "word",
         "position" : 3
      },
      {
         "token" : "weather",
         "start_offset" : 19,
         "end_offset" : 26,
         "type" : "word",
         "position" : 4
      },
      {
         "token" : "days",
         "start_offset" : 29,
         "end_offset" : 33,
         "type" : "word",
         "position" : 5
      },
      {
         "token" : "ago",
         "start_offset" : 34,
         "end_offset" : 37,
         "type" : "word",
         "position" : 6
      }
   ]
}

Список токенизаторов и их описания показаны здесь, в таблице, приведенной ниже -

S.No Токенизатор и описание
1

Standard tokenizer (standard)

Это построено на токенизаторе на основе грамматики, и для этого токенизатора можно настроить max_token_length.

2

Edge NGram tokenizer (edgeNGram)

Для этого токенизатора можно установить такие настройки, как min_gram, max_gram, token_chars.

3

Keyword tokenizer (keyword)

Это генерирует весь ввод как вывод, и для этого можно установить buffer_size.

4

Letter tokenizer (letter)

Это захватывает все слово, пока не встретится не буква.