分词使用说明
分词使用说明
全文索引服务涵盖丰富的查询功能,facet、排序/分页、任意复杂条件组合查询、function查询、stats统计等,其中还有一项重要的功能,就是分词。如我们常见的视频标题关键字搜索、商品标题关键字搜索等,都是利用了全文引擎的分词功能。
本文重点介绍两个类型分词器,分别是默认的英文分词、ik中文分词。
英文分词器
默认schema中定义了 text_general字段类型,此字段类型的分词器配置如下:
<!-- A general text field that has reasonable, generic
cross-language defaults: it tokenizes with StandardTokenizer,
removes stop words from case-insensitive "stopwords.txt"
(empty by default), and down cases. At query time only, it
also applies synonyms.
-->
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.FlattenGraphFilterFactory"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
配置的分词组件功能如:
- StandardTokenizerFactory 标准切词器,负责切分分词汇
- StopFilterFactory 停用词过滤器,过滤类似 “the”、“are”这种停用词
- SynonymGraphFilterFactory 近义词过滤器
- FlattenGraphFilterFactory 配合上述近义词过滤器完成近义词的过滤替换处理
- LowerCaseFilterFactory 小写过滤器
例如有句子description为: “A contented mind is the greatest blessing a man can enjoy in this world”
按照分词的短语查询如下:
SolrQuery solrQuery = new SolrQuery("description:\"greatest blessing\"");
QueryResponse response = client.query(collection, solrQuery);
就可以匹配到这个句子。另外属于分词的其他查询方式如:按某词汇term查询、短语查询、近似查询,详见 github demo例子
要使用这个英文的分词,只要在schema中设置字段类型为“text_general”即可。如需定制分词,可以进一步了解 Solr的analyzers章节
中文分词器
中文分词器有很多,这里介绍一款开源的ik分词器,官方介绍地址
使用配置参考 solr-7.3.1-ali-1.0/server/solr/configsets/_democonfig/conf/managed-schema 配置文件。主要配置如下:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
</analyzer>
</fieldType>
配置这个类型后,只要定义字段的类型为 “text_ik”,那么它就可以默认按照中文分词了。useSmart表示是否开启智能分词,智能分词会根据分词语法分词后,根据一些规则进一步挑选更合理的词汇,例如最长的完整词汇等规则。我们可以在Solr WebUI里尝试分词效果,如下:
index阶段 useSmart=false,效果如下:
query阶段 useSmart=true,效果如下:
中文分词的词库扩展
如需扩展ik的中午字典库,请联系“云HBase答疑”客服。
如果还有自定义的分词器,也可以联系“云HBase答疑”客服 咨询如何集成。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论