Установка и использование локального средства уничтожения китайских слов elasticsearch ik word breaker

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

Средство разбиения слов ik — это стандартное средство разбиения слов китайского языка. Он может сегментировать домен в соответствии с определенным словарем и поддерживает пользователей для настройки их собственных словарей, поэтому в дополнение к сегментации слов в соответствии с общими привычками мы также можем настроить сегментацию слов.

Токенизатор ik представляет собой пакет плагинов, и мы можем подключить его к ES с помощью плагина.

1. Установка

1.1 скачать

Адрес загрузки: адрес ik tokenizer.
Будьте осторожны, чтобы выбрать версию, которая соответствует вашему собственному es для загрузки.
вставьте сюда описание изображения

1.2 Декомпрессия

Создайте новую папку ik под плагинами загруженного установочного пакета в каталоге установки es и распакуйте файл.
вставьте сюда описание изображения
вставьте сюда описание изображения

1.3 старт

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

2. Используйте токенизатор IK

Токенизатор IK имеет два режима сегментации: режимы ik_max_word и ik_smart.
вставьте сюда описание изображения

1、i_max_word

Текст будет разбит на мельчайшие детали, например, «Доброе утро, Цзэн Шуци, председатель» будет разделен на «Цзэн, Шуци, председатель, директор, директор, доброе утро, утро, доброе утро».

GET /_analyze 
{
    
    
  "analyzer": "ik_max_word", // 最细粒度划分
  "text": "曾舒琪董事长早上好"
}

Результаты выполнения следующие:

{
    
    
  "tokens" : [
    {
    
    
      "token" : "曾",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
    
    
      "token" : "舒琪",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
    
    
      "token" : "董事长",
      "start_offset" : 3,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
    
    
      "token" : "董事",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
    
    
      "token" : "长",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "CN_CHAR",
      "position" : 4
    },
    {
    
    
      "token" : "早上好",
      "start_offset" : 6,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
    
    
      "token" : "早上",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
    
    
      "token" : "上好",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 7
    }
  ]
}

2、ik_smart

Сделает самое грубое разделение, например, разделит «Председатель Цзэн Шуци, доброе утро» на «Цзэн, Шуци, председатель, доброе утро».

GET /_analyze
{
    
    
  "analyzer": "ik_smart",  // 最粗粒度划分
  "text": "曾舒琪董事长早上好"
}

Результаты выполнения следующие:

{
    
    
  "tokens" : [
    {
    
    
      "token" : "曾",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
    
    
      "token" : "舒琪",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
    
    
      "token" : "董事长",
      "start_offset" : 3,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
    
    
      "token" : "早上好",
      "start_offset" : 6,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 3
    }
  ]
}

Это два простых режима использования токенизатора ik.

вопрос

Мы используем эти два режима и хотим, чтобы сегментатор слов ik разделял и делил существительные, но есть проблема, Zeng Shuqi, очевидно, является именем человека, и два режима не разделяют словарный запас вместе.

Решение

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

1. Найдите файл конфигурации xml в каталоге config
вставьте сюда описание изображения
2. Здесь нам нужно добавить свой собственный словарь. По сути, так называемый словарь заключается в создании файла, суффикс имени которого заканчивается на dict.
вставьте сюда описание изображения
3. Сюда я добавил словарь shipley_zeng.dict
вставьте сюда описание изображения
4. Откуда взялся этот словарь? Появиться из воздуха? Возвращаемся в предыдущий каталог. Вы видите, что словарей много, давайте просто откроем один и посмотрим.
вставьте сюда описание изображения
Глядя на этот main.dict,
вставьте сюда описание изображения
вы можете увидеть, что здесь очень много словарного запаса, этого словаря явно недостаточно в реальном процессе разработки приложения, нам нужно создать свой собственный словарь.

5. Создайте свой собственный словарь в каталоге config.Имя такое же, как у упомянутого выше, называется shipley_zeng.dict.Содержание
вставьте сюда описание изображения
словаря следующее.Здесь следует обратить внимание на формат кодировки как UTF-8.6
вставьте сюда описание изображения
. После добавления этого словаря мы перезапускаем es. Вы можете видеть, что созданный нами словарь был успешно загружен.
вставьте сюда описание изображения
7. Мы используем ik_max_word для запроса эффекта с максимальной степенью детализации.

GET /_analyze 
{
    
    
  "analyzer": "ik_max_word", // 最细粒度划分
  "text": "曾舒琪董事长早上好"
}

Результаты выполнения следующие:

{
    
    
  "tokens" : [
    {
    
    
      "token" : "曾舒琪",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
    
    
      "token" : "舒琪",
      "start_offset" : 1,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
    
    
      "token" : "董事长",
      "start_offset" : 3,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
    
    
      "token" : "董事",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
    
    
      "token" : "长",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "CN_CHAR",
      "position" : 4
    },
    {
    
    
      "token" : "早上好",
      "start_offset" : 6,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
    
    
      "token" : "早上",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
    
    
      "token" : "上好",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 7
    }
  ]
}

8. Используйте самый грубый запрос ik_smart, чтобы увидеть эффект

GET /_analyze
{
    
    
  "analyzer": "ik_smart",  // 最粗粒度划分
  "text": "曾舒琪董事长早上好"
}

Результаты выполнения следующие:

{
    
    
  "tokens" : [
    {
    
    
      "token" : "曾舒琪",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
    
    
      "token" : "董事长",
      "start_offset" : 3,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
    
    
      "token" : "早上好",
      "start_offset" : 6,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 2
    }
  ]
}

9. Мы видим, что независимо от того, использует ли он ik_max_word или ik_smart, он может разбирать и комбинировать слово Цзэн Шуци, чтобы удовлетворить наши потребности.
вставьте сюда описание изображения

Подведем итог

Вышеупомянутый местный инструмент для разбиения слов на китайском языке elasticsearch ik и его использование. Я надеюсь, что он будет полезен для тех, кто только что вступил в контакт с es. Спасибо. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной.

Supongo que te gusta

Origin blog.csdn.net/aq_money/article/details/130440968
Recomendado
Clasificación