O plugin IK Analysis integra o analisador Lucene IK e oferece suporte a dicionário personalizado. Suporta versões principais do Elasticsearch e OpenSearch. Mantido e apoiado com ❤️ pela INFINI Labs.
O plugin compreende analisador: ik_smart
, ik_max_word
e tokenizer: ik_smart
, ik_max_word
Você pode baixar os plug-ins empacotados aqui: https://release.infinilabs.com/
,
ou você pode usar o plugin
cli para instalar o plugin assim:
Para Elasticsearch
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1
Para OpenSearch
bin/opensearch-plugin install https://get.infini.cloud/opensearch/analysis-ik/2.12.0
Dicas: substitua seu próprio número de versão relacionado ao seu elasticsearch ou opensearch.
1.crie um índice
curl -XPUT http://localhost:9200/index
2.crie um mapeamento
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 alguns 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 com destaque
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>渔船 "
]
}
}
]
}
}
O arquivo de configuração IKAnalyzer.cfg.xml
pode estar localizado em {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 >
O plug-in atual suporta dicionário de recarga a quente para análise IK, por meio da configuração mencionada anteriormente no arquivo de configuração IK.
< entry key = " remote_ext_dict " >location</ entry >
< entry key = " remote_ext_stopwords " >location</ entry >
Entre quais location
se refere a um URL, como http://yoursite.com/getCustomDict
. Essa solicitação só precisa atender aos dois pontos a seguir para concluir a atualização dinâmica da segmentação.
A solicitação HTTP precisa retornar dois cabeçalhos, um é Last-Modified
e o outro é ETag
. Ambos são do tipo string e, se algum deles mudar, o plugin irá buscar uma nova segmentação para atualizar a biblioteca de palavras.
O formato do conteúdo retornado pela solicitação HTTP é uma palavra por linha e o caractere de nova linha é representado por n
.
Atender aos dois requisitos acima pode obter atualizações de hot word sem a necessidade de reiniciar a instância ES.
Você pode colocar as palavras quentes que precisam ser atualizadas automaticamente em um arquivo .txt codificado em UTF-8. Coloque-o no nginx ou em outro servidor HTTP simples. Quando o arquivo .txt for modificado, o servidor HTTP retornará automaticamente o Last-Modified e o ETag correspondentes quando o cliente solicitar o arquivo. Você também pode criar uma ferramenta separada para extrair vocabulário relevante do sistema comercial e atualizar esse arquivo .txt.
Certifique-se de que o formato de texto do seu dicionário personalizado seja codificado em UTF8.
ik_max_word: Executa a segmentação mais detalhada do texto. Por exemplo, ele segmentará "中华人民共和国国歌" em "中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌", exaustivamente gerando diversas combinações possíveis, adequadas para Consulta de Termos.
ik_smart: Executa a segmentação mais granular do texto. Por exemplo, ele segmentará "中华人民共和国国歌" em "中华人民共和国,国歌", adequado para consultas de frase.
Nota: ik_smart não é um subconjunto de ik_max_word.
Sinta-se à vontade para entrar no servidor Discord para discutir qualquer coisa sobre este projeto:
https://discord.gg/4tKTMkkvVX
Direitos autorais ©️ Laboratórios INFINI.
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para saber o idioma específico que rege as permissões e limitações da Licença.