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. Спасибо. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со мной.