infinilabs / analysis-ik

🚌 The IK Analysis plugin integrates Lucene IK analyzer into Elasticsearch and OpenSearch, support customized dictionary.
Apache License 2.0
16.6k stars 3.27k forks source link

[疑问] ES6.1.1 未配置任何分词词典可以正常分词,配置自定义词典后分词失效 #490

Closed Hevienz closed 5 years ago

Hevienz commented 6 years ago

你好,我在ES6.1.1中集成IK,测试时发现配置文件中不配置任何分词词典可以对“中国”进行正常的分词。

配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict"></entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!--  <entry key="remote_ext_dict"></entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords"></entry> -->
</properties>

配置自定义词典后,无法将“中国”作为单一词组,自定义词典中有“中国”一词。

是否有人遇到此类问题,麻烦予以解答。

medcl commented 6 years ago

有再具体一点的信息么? 词典是 utf8么? 测试流程如何?

Hevienz commented 6 years ago

您好,这是我们的构建方法。 https://github.com/QingCloudAppcenter/ELK/tree/master/docker-image/xpack/6.1.1/elasticsearch-x-6.1.1

配置文件如下: https://github.com/QingCloudAppcenter/ELK/blob/master/docker-image/xpack/6.1.1/elasticsearch-x-6.1.1/templates/IKAnalyzer.cfg.xml.tmpl

此配置文件采用Go的text/template语法 https://github.com/yunify/confd/blob/master/docs/templates.md

配置文件中不配置任何分词词典时可以对“中国”进行正常的分词。 而配置自定义词典后无法正常分词。

medcl commented 6 years ago

词典里面的单字词典去掉:extra_single_word

Hevienz commented 6 years ago

您好,我去掉了单字词典,测试结果未成功。

渲染后的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">custom/jieba.dic;main.dic;quantifier.dic;suffix.dic;extra_main.dic;preposition.dic;surname.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords">custom/stop_words.dic;extra_stopword.dic;stopword.dic</entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <entry key="remote_ext_dict"></entry>
        <!--用户可以在这里配置远程扩展停止词字典-->
        <entry key="remote_ext_stopwords"></entry>
</properties>

我的测试步骤如下:

1 由于安装了x-pack,所以首先执行./x-pack/setup-passwords interactive设置密码

2 使用如下测试脚本测试:

HOST=elastic:changeme@127.0.0.1

# 创建 index 索引
curl -XPUT -H 'content-type: application/json' http://$HOST:9200/index

# 创建 mapping
curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/_mapping -d'
{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word"
            }
        }
}'

# 索引 一些 文档
curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/1 -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'

curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/2 -d'
{"content":"公安部:各地校车将享最高路权"}
'

curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/3 -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'

curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/4 -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'

curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/5 -d'
{"content":"北京优帆科技有限公司于2012年4月正式成立,是全球首家实现资源秒级响应并按秒计量的基础云服务商"}
'

curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/6 -d'
{"content":"青云的12字决:从初创企业到云生态的蜕变"}
'

printf "\n\n"

# 高亮 查询
curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/_search  -d'
{
    "query" : { "match" : { "content" : "中国" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
'

printf "\n\n"

curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/_search -d'
{
    "query" : { "match" : { "content" : "青云" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
'

printf "\n\n"

curl -XPOST -H 'content-type: application/json' http://$HOST:9200/index/fulltext/_search  -d'
{
    "query" : { "match" : { "content" : "优帆科技" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
'

printf "\n\n"

测试结果如下:

{"took":67,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":3,"max_score":2.6018782,"hits":[{"_index":"index","_type":"fulltext","_id":"4","_score":2.6018782,"_source":
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
,"highlight":{"content":["<tag1>中</tag1><tag1>国</tag1>驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"]}},{"_index":"index","_type":"fulltext","_id":"3","_score":0.970927,"_source":
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
,"highlight":{"content":["<tag1>中</tag1>韩渔警冲突调查:韩警平均每天扣1艘<tag1>中</tag1><tag1>国</tag1>渔船"]}},{"_index":"index","_type":"fulltext","_id":"1","_score":0.2876821,"_source":
{"content":"美国留给伊拉克的是个烂摊子吗"}
,"highlight":{"content":["美<tag1>国</tag1>留给伊拉克的是个烂摊子吗"]}}]}}

{"took":65,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":2,"max_score":3.4586763,"hits":[{"_index":"index","_type":"fulltext","_id":"6","_score":3.4586763,"_source":
{"content":"青云的12字决:从初创企业到云生态的蜕变"}
,"highlight":{"content":["<tag1>青</tag1><tag1>云</tag1>的12字决:从初创企业到<tag1>云</tag1>生态的蜕变"]}},{"_index":"index","_type":"fulltext","_id":"5","_score":0.28962442,"_source":
{"content":"北京优帆科技有限公司于2012年4月正式成立,是全球首家实现资源秒级响应并按秒计量的基础云服务商"}
,"highlight":{"content":["北京优帆科技有限公司于2012年4月正式成立,是全球首家实现资源秒级响应并按秒计量的基础<tag1>云</tag1>服务商"]}}]}}

{"took":8,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.4481221,"hits":[{"_index":"index","_type":"fulltext","_id":"5","_score":1.4481221,"_source":
{"content":"北京优帆科技有限公司于2012年4月正式成立,是全球首家实现资源秒级响应并按秒计量的基础云服务商"}
,"highlight":{"content":["北京<tag1>优</tag1><tag1>帆</tag1><tag1>科</tag1><tag1>技</tag1>有限公司于2012年4月正式成立,是全球首家实现资源秒级响应并按秒计量的基础云服务商"]}}]}}

其中"中国"未被当做单一词组,烦请指点。