Le plugin IK Analysis intègre l'analyseur Lucene IK et prend en charge un dictionnaire personnalisé. Il prend en charge les versions majeures d'Elasticsearch et OpenSearch. Maintenu et pris en charge avec ❤️ par INFINI Labs.
Le plugin comprend l'analyseur : ik_smart
, ik_max_word
et le tokenizer : ik_smart
, ik_max_word
Vous pouvez télécharger les plugins packagés à partir d'ici : https://release.infinilabs.com/
,
ou vous pouvez utiliser le plugin
cli pour installer le plugin comme ceci :
Pour ElasticSearch
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1
Pour OpenSearch
bin/opensearch-plugin install https://get.infini.cloud/opensearch/analysis-ik/2.12.0
Conseils : remplacez votre propre numéro de version lié à votre elasticsearch ou opensearch.
1.créer un index
curl -XPUT http://localhost:9200/index
2.créer une cartographie
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.indexer quelques documents
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.requête avec mise en évidence
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" : {}
}
}
}
'
Résultat
{
"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>渔船 "
]
}
}
]
}
}
Le fichier de configuration IKAnalyzer.cfg.xml
peut être situé dans {conf}/analysis-ik/config/IKAnalyzer.cfg.xml
ou {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 >
Le plugin actuel prend en charge le dictionnaire de rechargement à chaud pour l'analyse IK, via la configuration mentionnée précédemment dans le fichier de configuration IK.
< entry key = " remote_ext_dict " >location</ entry >
< entry key = " remote_ext_stopwords " >location</ entry >
Parmi lesquels location
fait référence à une URL, telle que http://yoursite.com/getCustomDict
. Cette demande doit uniquement répondre aux deux points suivants pour terminer la mise à jour à chaud de la segmentation.
La requête HTTP doit renvoyer deux en-têtes, l'un est Last-Modified
et l'autre est ETag
. Les deux sont de type chaîne, et si l'un ou l'autre change, le plugin récupérera une nouvelle segmentation pour mettre à jour la bibliothèque de mots.
Le format de contenu renvoyé par la requête HTTP est d'un mot par ligne et le caractère de nouvelle ligne est représenté par n
.
Le respect des deux exigences ci-dessus permet d'obtenir des mises à jour de mots chauds sans avoir besoin de redémarrer l'instance ES.
Vous pouvez placer les mots chauds qui doivent être automatiquement mis à jour dans un fichier .txt codé en UTF-8. Placez-le sous nginx ou un autre serveur HTTP simple. Lorsque le fichier .txt est modifié, le serveur HTTP renvoie automatiquement le Last-Modified et l'ETag correspondants lorsque le client demande le fichier. Vous pouvez également créer un outil distinct pour extraire le vocabulaire pertinent du système d'entreprise et mettre à jour ce fichier .txt.
Veuillez vous assurer que le format de texte de votre dictionnaire personnalisé est encodé en UTF8.
ik_max_word : effectue la segmentation la plus fine du texte. Par exemple, il segmentera "中华人民共和国国歌" en "中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌", de manière exhaustive générer diverses combinaisons possibles, adaptées à la requête de termes.
ik_smart : effectue la segmentation la plus grossière du texte. Par exemple, il segmentera « 中华人民共和国国歌 » en « 中华人民共和国,国歌 », adapté aux requêtes Phrase.
Remarque : ik_smart n'est pas un sous-ensemble de ik_max_word.
N'hésitez pas à rejoindre le serveur Discord pour discuter de tout ce qui concerne ce projet :
https://discord.gg/4tKTMkkvVX
Droit d'auteur ©️ INFINI Labs.
Sous licence Apache, version 2.0 (la « Licence » ); vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf disposition contraire de la loi applicable ou accord écrit, le logiciel distribué sous la licence est distribué « TEL QUEL », SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite. Consultez la licence pour connaître la langue spécifique régissant les autorisations et les limitations en vertu de la licence.