Плагин IK Analysis интегрирует анализатор Lucene IK (http://code.google.com/p/ik-analyzer/) в OpenSearch, поддерживает пользовательский словарь.
Анализаторы: ik_smart
, ik_max_word
, токенизаторы: ik_smart
, ik_max_word
.
Ответвление от: https://github.com/medcl/elasticsearch-analysis-ik/
Версия IK | Версия OpenSearch |
---|---|
main | 1.x -> main |
Опция 1 — скачайте готовый пакет по ссылке: https://github.com/soosinha/opensearch-analysis-ik/releases.
Создайте папку плагина cd your-opensearch-root/plugins/
и создайте в ней папку ik
.
Распакуйте плагин в папку your-opensearch-root/plugins/ik
.
Опция 2 — используйте opensearch-plugin для установки.
./bin/opensearch-plugin install https://github.com/soosinha/opensearch-analysis-ik/releases/download/v1.0.0/opensearch-analysis-ik-1.0.0.zip
Примечание: замените 1.0.0
на вашу версию OpenSearch.
curl -XPUT http://localhost:9200/index
curl -XPOST http://localhost:9200/index/_mapping -H 'Content-Type:application/json' -d'
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}'
curl -XPOST http://localhost:9200/index/_create/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http://localhost:9200/index/_create/2 -H 'Content-Type:application/json' -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http://localhost:9200/index/_create/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://localhost:9200/index/_create/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'
curl -XPOST http://localhost:9200/index/_search -H 'Content-Type:application/json' -d'
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
'
Результат
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 2,
"hits": [
{
"_index": "index",
"_type": "fulltext",
"_id": "4",
"_score": 2,
"_source": {
"content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
},
"highlight": {
"content": [
"<tag1>中国</tag1>驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首 "
]
}
},
{
"_index": "index",
"_type": "fulltext",
"_id": "3",
"`_score": 2,
"_source": {
"content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
},
"highlight": {
"content": [
"均每天扣1艘<tag1>中国</tag1>渔船 "
]
}
}
]
}
}
Файл IKAnalyzer.cfg.xml
находится по пути {conf}/analysis-ik/config/IKAnalyzer.cfg.xml
или {plugins}/opensearch-analysis-ik-*/config/IKAnalyzer.cfg.xml
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--Пользователь может настроить здесь свой собственный расширенный словарь-->
<entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
<!--Пользователь может настроить здесь свой собственный словарь стоп-слов-->
<entry key="ext_stopwords">custom/ext_stopword.dic</entry>
<!--Пользователь может настроить здесь удалённый расширенный словарь -->
<entry key="remote_ext_dict">location</entry> ### Метод использования горячего обновления IK-токенизации
В настоящее время этот плагин поддерживает горячее обновление IK-токенизации. Это можно сделать с помощью следующей конфигурации в файле конфигурации IK:
```xml
<!--Пользователь может настроить здесь удалённый расширенный словарь стоп-слов-->
<entry key="remote_ext_stopwords">location</entry>
Здесь location
— это URL, например, http://yoursite.com/getCustomDict
. Этот запрос должен соответствовать следующим двум пунктам для завершения токенизации горячего обновления:
Этот HTTP-запрос должен возвращать два заголовка (header): один — Last-Modified
, другой — ETag
. Оба являются строковыми типами. Достаточно, чтобы один из них изменился, и этот плагин будет извлекать новый токен и обновлять словарную базу.
Возвращаемое содержимое этого HTTP-запроса должно быть отформатировано как одна строка токенов, разделённых символами новой строки (\n
).
После выполнения этих двух требований можно реализовать горячее обновление токенизации без необходимости перезапуска экземпляра OpenSearch.
Можно поместить слова, которые необходимо обновить автоматически, в файл .txt в кодировке UTF-8 и разместить его на сервере nginx или другом простом HTTP-сервере. Когда файл .txt изменяется, HTTP-сервер автоматически вернёт соответствующие Last-Modified
и ETag
при запросе клиента. Можно также создать инструмент для извлечения соответствующих слов из бизнес-системы и обновления файла .txt.
Have fun.
Пожалуйста, убедитесь, что формат текста вашего расширенного словаря — UTF8.
git clone https://github.com/soosinha/opensearch-analysis-ik
cd opensearch-analysis-ik
git checkout tags/{version}
mvn clean
mvn compile
mvn package
Скопируйте и распакуйте файлы из папки release: #{project_path}/opensearch-analysis-ik/target/releases/opensearch-analysis-ik-*.zip в каталог плагинов opensearch, например: plugins/ik. Перезапустите opensearch.
Тестируйте, вызывая интерфейс анализа в определённом индексе, а не напрямую вызывая интерфейс анализа. Например:
curl -XGET "http://localhost:9200/your_index/_analyze" -H 'Content-Type: application/json' -d'
{
"text":"中华人民共和国MN","tokenizer": "my_ik"
}'
ik_max_word будет разбивать текст на мельчайшие фрагменты, такие как «中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌». Он исчерпывает все возможные комбинации и подходит для запросов термина.
ik_smart будет выполнять более грубое разбиение, такое как «中华人民共和国,国歌», и подходит для фразовых запросов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )