El complemento IK Analysis integra el analizador Lucene IK y admite diccionario personalizado. Admite versiones principales de Elasticsearch y OpenSearch. Mantenido y respaldado con ❤️ por INFINI Labs.
El complemento comprende analizador: ik_smart
, ik_max_word
y tokenizador: ik_smart
, ik_max_word
Puede descargar los complementos empaquetados desde aquí: https://release.infinilabs.com/
,
o puede usar el plugin
cli para instalar el complemento de esta manera:
Para búsqueda elástica
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1
Para búsqueda abierta
bin/opensearch-plugin install https://get.infini.cloud/opensearch/analysis-ik/2.12.0
Consejos: reemplace su propio número de versión relacionado con su elasticsearch o opensearch.
1.crear un índice
curl -XPUT http://localhost:9200/index
2.crear un mapeo
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.indexar algunos documentos
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.consulta con resaltado
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" : {}
}
}
}
'
Resultado
{
"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>渔船 "
]
}
}
]
}
}
El archivo de configuración IKAnalyzer.cfg.xml
se puede ubicar en {conf}/analysis-ik/config/IKAnalyzer.cfg.xml
o {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 >
El complemento actual admite la recarga en caliente del diccionario para IK Analysis, a través de la configuración mencionada anteriormente en el archivo de configuración de IK.
< entry key = " remote_ext_dict " >location</ entry >
< entry key = " remote_ext_stopwords " >location</ entry >
Entre los cuales location
hace referencia a una URL, como http://yoursite.com/getCustomDict
. Esta solicitud solo necesita cumplir con los dos puntos siguientes para completar la actualización en caliente de segmentación.
La solicitud HTTP debe devolver dos encabezados, uno es Last-Modified
y el otro es ETag
. Ambos son de tipo cadena y, si alguno de ellos cambia, el complemento buscará una nueva segmentación para actualizar la biblioteca de palabras.
El formato de contenido devuelto por la solicitud HTTP es una palabra por línea y el carácter de nueva línea está representado por n
.
Cumplir los dos requisitos anteriores puede lograr actualizaciones de palabras clave sin la necesidad de reiniciar la instancia de ES.
Puede colocar las palabras clave que deben actualizarse automáticamente en un archivo .txt codificado en UTF-8. Colóquelo en nginx u otro servidor HTTP simple. Cuando se modifica el archivo .txt, el servidor HTTP devolverá automáticamente la Última modificación y la ETag correspondientes cuando el cliente solicite el archivo. También puede crear una herramienta independiente para extraer vocabulario relevante del sistema empresarial y actualizar este archivo .txt.
Asegúrese de que el formato de texto de su diccionario personalizado esté codificado en UTF8.
ik_max_word: realiza la segmentación más fina del texto. Por ejemplo, segmentará "中华人民共和国国歌" en "中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌", exhaustivamente generando varias combinaciones posibles, adecuadas para Term Query.
ik_smart: realiza la segmentación más gruesa del texto. Por ejemplo, segmentará "中华人民共和国国歌" en "中华人民共和国,国歌", adecuado para consultas de frases.
Nota: ik_smart no es un subconjunto de ik_max_word.
No dudes en unirte al servidor de Discord para discutir cualquier tema relacionado con este proyecto:
https://discord.gg/4tKTMkkvVX
Copyright ©️ Laboratorios INFINI.
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este archivo excepto de conformidad con la Licencia. Puede obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones de la Licencia.