Das IK-Analyse-Plugin integriert den Lucene IK-Analysator und unterstützt ein benutzerdefiniertes Wörterbuch. Es unterstützt Hauptversionen von Elasticsearch und OpenSearch. Gewartet und unterstützt mit ❤️ von INFINI Labs.
Das Plugin umfasst den Analysator: ik_smart
, ik_max_word
und den Tokenizer: ik_smart
, ik_max_word
Sie können die gepackten Plugins hier herunterladen: https://release.infinilabs.com/
,
oder Sie können die plugin
CLI verwenden, um das Plugin wie folgt zu installieren:
Für Elasticsearch
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1
Für OpenSearch
bin/opensearch-plugin install https://get.infini.cloud/opensearch/analysis-ik/2.12.0
Tipps: Ersetzen Sie Ihre eigene Versionsnummer für Ihre Elasticsearch oder Opensearch.
1. Erstellen Sie einen Index
curl -XPUT http://localhost:9200/index
2. Erstellen Sie eine Zuordnung
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. Indizieren Sie einige Dokumente
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.Abfrage mit Hervorhebung
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" : {}
}
}
}
'
Ergebnis
{
"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>渔船 "
]
}
}
]
}
}
Die Konfigurationsdatei IKAnalyzer.cfg.xml
befindet sich unter {conf}/analysis-ik/config/IKAnalyzer.cfg.xml
oder {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 >
Das aktuelle Plugin unterstützt das Hot-Reloading-Wörterbuch für die IK-Analyse über die zuvor in der IK-Konfigurationsdatei erwähnte Konfiguration.
< entry key = " remote_ext_dict " >location</ entry >
< entry key = " remote_ext_stopwords " >location</ entry >
Dabei bezieht sich location
auf eine URL, beispielsweise http://yoursite.com/getCustomDict
. Diese Anfrage muss nur die folgenden zwei Punkte erfüllen, um das Segmentierungs-Hot-Update abzuschließen.
Die HTTP-Anfrage muss zwei Header zurückgeben, einer ist Last-Modified
und der andere ist ETag
. Beide sind vom Typ „String“, und wenn sich einer ändert, ruft das Plugin eine neue Segmentierung ab, um die Wortbibliothek zu aktualisieren.
Das von der HTTP-Anfrage zurückgegebene Inhaltsformat ist ein Wort pro Zeile, und das Zeilenumbruchzeichen wird durch n
dargestellt.
Durch die Erfüllung der beiden oben genannten Anforderungen können Hot-Word-Updates erreicht werden, ohne dass die ES-Instanz neu gestartet werden muss.
Sie können die wichtigen Wörter, die automatisch aktualisiert werden müssen, in einer in UTF-8 codierten TXT-Datei platzieren. Platzieren Sie es unter Nginx oder einem anderen einfachen HTTP-Server. Wenn die TXT-Datei geändert wird, gibt der HTTP-Server automatisch das entsprechende Last-Modified- und ETag zurück, wenn der Client die Datei anfordert. Sie können auch ein separates Tool erstellen, um relevantes Vokabular aus dem Geschäftssystem zu extrahieren und diese TXT-Datei zu aktualisieren.
Bitte stellen Sie sicher, dass das Textformat Ihres benutzerdefinierten Wörterbuchs UTF8-codiert ist.
ik_max_word: Führt die feinkörnige Segmentierung des Textes durch. Beispielsweise wird „中华人民共和国国歌“ segmentiert „中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌“, erschöpfende Generierung verschiedener möglicher Kombinationen, die für die Begriffsabfrage geeignet sind.
ik_smart: Führt die gröbste Segmentierung des Textes durch. Beispielsweise wird „中华人民共和国国歌“ in „中华人民共和国,国歌“ segmentiert, was für Phrasenabfragen geeignet ist.
Hinweis: ik_smart ist keine Teilmenge von ik_max_word.
Fühlen Sie sich frei, dem Discord-Server beizutreten, um alles rund um dieses Projekt zu besprechen:
https://discord.gg/4tKTMkkvVX
Copyright ©️ INFINI Labs.
Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die im Rahmen der Lizenz vertriebene Software „WIE BESEHEN“ und OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, vertrieben. Die spezifische Sprache, die die Berechtigungen und Einschränkungen im Rahmen der Lizenz regelt, finden Sie in der Lizenz.