前提: Solr提供了一整套的数据检索方案,一台四核CPU、16G内存的机器,千兆网络。
需求: 1、对Solr创建索引的效率有一定的要求。
2、中文分词速度要快,搜索速度也要快。
3、中文分词准确率有一定的要求。
说明: 以下是在Solr上分别配置不同的中文分词器,它们之间的比较。
1. 中文分词
1.1 中文分词器概述
名称 |
最近更新 |
速度(网上情报) |
扩展性支持、其它 |
mmseg4j |
2013 |
complex 60W字/s (1200 KB/s) simple 100W字/s (1900 KB/s) |
使用sougou词库,也可自定义 (complex\simple\MaxWord) |
IKAnalyzer |
2012 |
IK2012 160W字/s (3000KB/s) |
支持用户词典扩展定义、支持自定义停止词 (智能\细粒度) |
Ansj |
2014 |
BaseAnalysis 300W字/s hlAnalysis 40W字/s |
支持用户自定义词典,可以分析出词性,有新词发现功能 |
paoding |
2008 |
100W字/s |
支持不限制个数的用户自定义词库 |
注意:
中文分词器可能与最新版本Lucene不兼容,配置好运行时出现TokenStream contractviolation错误,对于mmseg4j需要更改com.chenlb.mmseg4j.analysis.MMSegTokenizer源码,添加super.reset()在reset()内,重新编译后替换原jar。
1.2 mmseg4j
创建索引效果:
FieldValue内容: |
京華时报ぼおえ2009年1月23日报道,뭄내ㅠㅛㅜ치ㅗ受一股来自中西伯利亚的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度celsius degree,同时伴有6到7级的偏北风。 |
在词库中补充: |
京華、뭄내、ぼおえ、受一股来 |
类型 |
结果 |
textMaxWord |
京華|时报|ぼ|お|え|2009|年|1|月|23|日|报道|뭄|내|ㅠ|ㅛ|ㅜ|치|ㅗ|受|一股|来|自|中|西|伯|利|亚|的|强|冷|空气|影响|本市|出现|大风|降温|天气|白天|最高|气温|只有|零下|7|摄氏|度|celsius|degree|同时|伴有|6|到|7|级|的|偏|北风 |
textComplex |
京華|时报|ぼおえ|2009|年|1|月|23|日|报道|뭄내ㅠㅛ|ㅜ|치|ㅗ|受一股来|自|中|西伯利亚|的|强|冷空气|影响|本市|出现|大风|降温|天气|白天|最高气温|只有|零下|7|摄氏度|celsius|degree|同时|伴有|6|到|7|级|的|偏|北风 |
textSimple |
京華|时报|ぼおえ|2009|年|1|月|23|日|报道|뭄내ㅠㅛ|ㅜ|치|ㅗ|受一股来|自|中西|伯|利|亚|的|强|冷空气|影响|本市|出现|大风|降温|天气|白天|最高气温|只有|零下|7|摄氏度|celsius|degree|同时|伴有|6|到|7|级|的|偏|北风 |
创建索引效率:
17个各种类型字段,在solr博文中字段基础上,选一空string类型字段改为新类型,并写入文本内容(原纯文本Size约为400B,SolrInputDocument对象Size约为1130B)。
文本内容以词库中任选20词拼成的句子,每词大约3字,一句大约60字。
总数据量为2000W条数据,与2.2节相同配置。
字段类型 |
创建时间(s) |
索引大小(GB) |
网络(MB/s) |
速率(W条/s) |
textMaxWord |
3115 |
4.95 |
6.0 |
0.64 (38W字/s) |
textComplex |
4860 |
4.3 |
5.0 |
0.41 (25W字/s) |
textSimple |
3027 |
4.32 |
6.5 |
0.66 (40W字/s) |
string |
2350 |
9.08 |
8.0 |
0.85 (57W字/s) |
速度:在与“solr博文http://www.cnblogs.com/wgp13x/p/3742653.html”中1.2节相同配置的情况下,分词索引创建速度要差于不使用分词的。
大小:分词索引大小要小于不使用分词的,经测试分词字段配置成autoGeneratePhraseQueries="false"对索引大小几乎没有影响。
数据搜索效率:
文本内容以词库中任选20词拼成的句子,每词大约3字,一句大约60字,总数据量为2000W条数据。
字段类型 |
关键词 |
搜索时间(ms) |
结果(条) |
textMaxWord |
一不做二不休 |
180 |
2556 |
textComplex |
一不做二不休 |
59 |
2648 |
textSimple |
一不做二不休 |
62 |
2622 |
string |
*一不做二不休* |
20000 |
2689 |
textMaxWord |
一个国家两种制度 |
22 |
2620 |
textComplex |
一个国家两种制度 |
12 |
2687 |
textSimple |
一个国家两种制度 |
10 |
2670 |
string |
*一个国家两种制度* |
15500 |
2657 |
textMaxWord |
一些 |
24 |
15999 |
textComplex |
一些 |
11 |
2687 |
textSimple |
一些 |
9 |
2665 |
string |
*一些* |
14200 |
15758 |
textMaxWord |
转辗反侧 |
15 |
2622 |
textComplex |
转辗反侧 |
5 |
2632 |
textSimple |
转辗反侧 |
9 |
2676 |
string |
*转辗反侧* |
15600 |
2665 |
补充:
对于非中文、数字、英文词汇,包括繁体字,在词典中加入新词汇即可。
mmseg4j对于“都是先从容易的做起”,不能把“容易”分出来,分词结果为“都是|先|从容|易|的|做起”。
网上推荐使用textMaxWord类型分词。
1.3 IKAnalyzer
创建索引效果:
FieldValue内容、在词库中补充均同1.2。
分词字段配置autoGeneratePhraseQueries="false"
类型 |
结果 |
细粒度 |
京華|时报|ぼおえ|2009|年|1|月|23|日报|日|报道|뭄내ㅠㅛ|ㅜ|치|ㅗ|受一股来|一股|一|股|来自|中西|西伯利亚|西伯|伯利|亚|的|强冷空气|冷空气|空气|影响|本市|出现|大风|降温|天气|白天|最高|高气|气温|只有|有|零下|零|下|7|摄氏度|摄氏|度|celsius|degree|同时|伴有|有|6|到|7|级|的|偏北风|偏北|北风 |
创建索引效率:
字段类型 |
创建时间(s) |
索引大小(GB) |
网络(MB/s) |
速率(W条/s) |
细粒度 |
3584 |
5.06 |
6.0 |
0.56 (33W字/s) |
速度:与1.2比较,分词索引创建速度要略差于使用mmseg4j分词的。
大小:分词索引大小要略大于使用mmseg4j分词的。
数据搜索效率:
字段类型 |
关键词 |
搜索时间(ms) |
结果(条) |
细粒度 |
一不做二不休 |
400 |
5949255 |
细粒度 |
一个国家两种制度 |
500 |
6558449 |
细粒度 |
一些 |
300 |
5312103 |
细粒度 |
转辗反侧 |
15 |
10588 |
补充:
mmseg4j中textMaxWord,“一不做二不休”被分为:一|不做|二不|不休;
IKAnalyzer中细粒度,“一不做二不休”被分为:一不做二不休|一|不做|二不休|二|不休;
因此同样使用autoGeneratePhraseQueries="false",“一不做二不休”搜索,IKAnalyzer搜索出来的结果要远多于mmseg4j。
1.4 Ansj
创建索引效果:
FieldValue内容同1.2,没有补充词库。
<fieldType name="text_ansj"class="solr.TextField">
<analyzertype="index">
<tokenizerclass="org.ansj.solr.AnsjTokenizerFactory" conf="ansj.conf"rmPunc="true"/>
</analyzer>
<analyzertype="query">
<tokenizerclass="org.ansj.solr.AnsjTokenizerFactory" analysisType="1"rmPunc="true"/>
</analyzer>
</fieldType>
结果 |
京华|时报|ぼ|お|え|2009年|1月|23日|报道|,|뭄|내|ㅠ|ㅛ|ㅜ|치|ㅗ|受|一股|来自|中|西伯利亚|的|强|强冷空气|冷空气|影响|,|本市|出现|大风|降温|天气|,|白天|最高|气温|只|只有|有|零下|7摄氏度|摄氏|摄氏度|celsius||degree|,|同时|伴|伴有|有|6|到|7级|的|偏|偏北风|北风|。 |
“京華”二字被分词后变成了“京华”,据朋友介绍,它有将生僻字改字的Bug。
创建索引效率:
字段类型 |
创建时间(s) |
索引大小(GB) |
网络(MB/s) |
速率(W条/s) |
细粒度 |
3815 |
5.76 |
5.2 |
0.52 (31W字/s) |
速度:与1.2、1.3比较,分词索引创建速度要略差于使用mmseg4j、IKAnalyzer分词的。
大小:分词索引大小要略大于使用mmseg4j、IKAnalyzer分词的。
数据搜索效率:
关键词 |
搜索时间(ms) |
结果(条) |
一不做二不休 |
200 |
2478 |
一个国家两种制度 |
15 |
0 |
一些 |
25 |
15665 |
转辗反侧 |
6 |
2655 |
1.5 总结
按分词后的结果进行搜索,若在分词字段配置autoGeneratePhraseQueries="false",则是搜索条件先分词,再使用分词在结果中搜索,默认的是true。autoGeneratePhraseQueries="false"对创建索引速度没影响,对搜索结果有影响。也可以修改Solr的QueryPasser,对于输入的一个字符串,先进行相应分词,再使用分词结果在索引集中搜索。
精确或模糊*搜索,都是以词为单位搜索。精确搜索是指返回所有包含分词的结果。
分词器能对word、letter、digit等进行识别。
对于不使用分词的String类型进行搜索,只能通过模糊搜索*,搜到连字,以字为单位搜索。
在分词索引内搜索,速度较快;不分词,需要遍历所有文档,速度较慢。
如果需要分词的话,那分词速度是主要瓶颈。
综合考虑,mmseg4j是首选的中文分词器。
http://www.cnblogs.com/wgp13x/p/3748764.html
相关推荐
**Elasticsearch 7.6.2 中文分词器详解** Elasticsearch 是一个流行的开源全文搜索引擎,它提供了一种高效、灵活的方式来存储、搜索和分析...正确配置和使用IK分词器,对于提升Elasticsearch的中文检索性能至关重要。
由于中文是以词为基本单位,不像英文那样有明显的空格分隔,因此在进行信息检索时,需要先对中文文本进行分词,将连续的汉字序列切分成具有独立含义的词语。这样才能有效地进行关键词匹配和索引。 在Lucene中,常见...
在Solr 5.x和6.x版本中,中文分词器扮演着至关重要的角色,它负责将中文文本拆分成有意义的词汇,便于索引和查询。下面将详细介绍Solr中的中文分词器及其相关知识。 一、Solr中文分词器概述 在处理中文文档时,由于...
**Elasticsearch与IK中文分词器** Elasticsearch(ES)是一款强大的开源搜索引擎,它基于Lucene构建,提供实时、分布式、可扩展的搜索和分析能力。在处理中文文档时,由于中文句子中词语之间没有明显的分隔符,因此...
Ik分词器的设计目标是实现高性能、高精度的中文分词,并且支持自定义扩展,能够适应各种复杂的中文文本处理场景。 **Ik分词器的版本匹配** 标题提到的是"ik中文分词器5.5.0",这意味着它是专为Elasticsearch 5.5.0...
中文分词器能够将连续的汉字序列切分成具有语义的词汇,这对于中文搜索的准确性和效率至关重要。 IK Analyzer 2012FF_hf1是其中一种流行的开源中文分词器,它特别适合于Solr集成。IK Analyzer是由国内开发者开发的...
在处理中文文档时,分词器是至关重要的组件,因为中文句子不像英文那样由空格自然分隔单词,需要专门的工具进行分词。标题中的"solr7.3.1中文分词器"指的就是为Solr 7.3.1版本特别优化的中文分词解决方案。 描述中...
Ik中文分词器,全称为“Intelligent Keyword”,是广泛应用于Java环境中的一个高性能中文分词组件,尤其在Apache Solr搜索引擎中发挥着关键作用。Ikik-analyzer-solr-6.3.0是Ik分词器的一个特定版本,专为Solr6.3.0...
在Elasticsearch 7.0中,使用IK分词器是优化中文分词和搜索性能的关键步骤。通过安装并配置IK插件,我们可以利用其丰富的分词策略来处理中文文本,从而提升ES在中文环境下的搜索精度和用户体验。同时,理解并正确...
**IK分词器详解** IK分词器是针对Elasticsearch(ES)的一款热门中文分词插件,其全称为...正确安装和配置IK分词器,可以显著提升Elasticsearch对中文文本的索引和搜索性能,从而更好地服务于各种信息检索和分析任务。
** Elasticsearch (ES) 中文分词器:IK 分词器详解 ** Elasticsearch(ES)作为一款强大的全文搜索引擎,其内置的分词器在处理英文文本时表现出色,但在处理中文这种复杂的语言结构时,可能无法满足需求。为了解决...
Paoding分词器是一款专为Lucene设计的高性能、高精度的中文分词组件,它在2.0.4-alpha2这个版本中,不仅提供了基础的分词功能,还引入了多种优化策略,使得在复杂语境下的分词效果更为精准。Paoding这个名字来源于...
ik分词器7.17.10是该工具的一个版本,适用于Elasticsearch 7.x系列,提供了更稳定和优化的分词性能。 ### 1. Elasticsearch与ik分词器的关系 Elasticsearch是一款基于Lucene的开源全文搜索引擎,广泛应用于日志...
jieba(结巴分词) 免费使用 HanLP(汉语言处理包) 免费使用 SnowNLP(中文的类库) 免费使用 FoolNLTK(中文处理工具包) 免费使用 Jiagu(甲骨NLP) 免费使用 pyltp(哈工大语言云) 商用需要付费 THULAC...
**Elasticsearch 7.17.4 版本中的中文 IK 分词器** Elasticsearch 是一个流行的、开源的全文搜索引擎,它基于 Lucene 库,并提供了分布式、...记住,选择合适的分词器对于 Elasticsearch 的性能和用户体验至关重要。
IK中文分词器是一款在Java平台上广泛...其强大的分词性能、灵活的扩展性以及对新词的敏感度,使得它成为众多开发者和企业的首选。对于需要对中文文本进行深度分析和处理的项目,选择IK Analyzer无疑是一个明智的选择。
IK分词器(Intelligent Chinese Analyzer for Elasticsearch)是专门为Elasticsearch设计的一款高性能中文分词组件。它支持多种分词模式,包括精确模式、全模式、最短路径模式、关键词模式等,能够满足不同场景下的...
标题中的“ik中文分词器插件”指的是IK Analyzer,这是一个专门为中文处理设计的开源分词工具,广泛应用于搜索引擎、信息...在实际操作中,我们需要理解其工作原理,正确配置并持续优化词典,以实现最佳的分词性能。
中文分词器的作用就是将连续的汉字序列切分成具有独立语义的词汇,这是进行中文文本分析的基础。常见的中文分词器有IK Analyzer、SmartCN、Hankcs等。这个6.4.0版本的中文分词器应该与Elasticsearch 6.4.0 版本兼容...