Плагин IK Analysis интегрирует анализатор Lucene IK и поддерживает настраиваемый словарь. Он поддерживает основные версии Elasticsearch и OpenSearch. Поддерживается и поддерживается INFINI Labs с помощью ❤️.
Плагин включает в себя анализатор: ik_smart
, ik_max_word
и токенизатор: ik_smart
, ik_max_word
Вы можете скачать упакованные плагины здесь: https://release.infinilabs.com/
,
или вы можете использовать консоль plugin
для установки плагина следующим образом:
Для Elasticsearch
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1
Для OpenSearch
bin/opensearch-plugin install https://get.infini.cloud/opensearch/analysis-ik/2.12.0
Советы: замените свой собственный номер версии, связанный с вашим elasticsearch или opensearch.
1.создать индекс
curl -XPUT http://localhost:9200/index
2.создать сопоставление
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"
}
}
} '
3.индексировать некоторые документы
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":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'
4.запрос с подсветкой
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}/elasticsearch-analysis-ik-*/config/IKAnalyzer.cfg.xml
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
< properties >
< 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 >
< entry key = " remote_ext_stopwords " >http://xxx.com/xxx.dic</ entry >
</ properties >
Текущий плагин поддерживает горячую перезагрузку словаря для IK Analysis посредством конфигурации, упомянутой ранее в файле конфигурации IK.
< entry key = " remote_ext_dict " >location</ entry >
< entry key = " remote_ext_stopwords " >location</ entry >
Среди которых location
относится к URL-адресу, например http://yoursite.com/getCustomDict
. Этот запрос должен соответствовать только следующим двум пунктам, чтобы завершить горячее обновление сегментации.
HTTP-запрос должен вернуть два заголовка: один — Last-Modified
, а другой — ETag
. Оба они имеют строковый тип, и если какой-либо из них изменится, плагин выполнит новую сегментацию для обновления библиотеки слов.
Формат содержимого, возвращаемый HTTP-запросом, — одно слово в строке, а символ новой строки представлен n
.
Соблюдение двух вышеуказанных требований может обеспечить обновление горячих слов без необходимости перезапуска экземпляра ES.
Вы можете поместить ключевые слова, которые необходимо автоматически обновлять, в файл .txt в кодировке UTF-8. Разместите его под nginx или другим простым HTTP-сервером. При изменении файла .txt HTTP-сервер автоматически возвращает соответствующие Last-Modified и ETag, когда клиент запрашивает файл. Вы также можете создать отдельный инструмент для извлечения соответствующей лексики из бизнес-системы и обновления этого файла .txt.
Убедитесь, что текстовый формат вашего пользовательского словаря имеет кодировку UTF8.
ik_max_word: выполняет наиболее детальную сегментацию текста. Например, он будет сегментировать «中华人民共和国国歌» на «中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌», исчерпывающе создание различных возможных комбинаций, подходящих для терминального запроса.
ik_smart: выполняет наиболее грубую сегментацию текста. Например, он сегментирует «中华人民共和国国歌» на «中华人民共和国,国歌», подходящее для фразовых запросов.
Примечание. ik_smart не является подмножеством ik_max_word.
Не стесняйтесь присоединиться к серверу Discord, чтобы обсудить что-нибудь, связанное с этим проектом:
https://discord.gg/4tKTMkkvVX
Авторские права ©️ INFINI Labs.
Лицензируется по лицензии Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.