全部产品
云市场

分词使用说明

更新时间:2019-01-23 10:07:48

分词使用说明

全文索引服务涵盖丰富的查询功能,facet、排序/分页、任意复杂条件组合查询、function查询、stats统计等,其中还有一项重要的功能,就是分词。如我们常见的视频标题关键字搜索、商品标题关键字搜索等,都是利用了全文引擎的分词功能。
本文重点介绍两个类型分词器,分别是默认的英文分词、ik中文分词。

英文分词器

默认schema中定义了 text_general字段类型,此字段类型的分词器配置如下:

  1. <!-- A general text field that has reasonable, generic
  2. cross-language defaults: it tokenizes with StandardTokenizer,
  3. removes stop words from case-insensitive "stopwords.txt"
  4. (empty by default), and down cases. At query time only, it
  5. also applies synonyms.
  6. -->
  7. <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
  8. <analyzer type="index">
  9. <tokenizer class="solr.StandardTokenizerFactory"/>
  10. <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
  11. <!-- in this example, we will only use synonyms at query time
  12. <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
  13. <filter class="solr.FlattenGraphFilterFactory"/>
  14. -->
  15. <filter class="solr.LowerCaseFilterFactory"/>
  16. </analyzer>
  17. <analyzer type="query">
  18. <tokenizer class="solr.StandardTokenizerFactory"/>
  19. <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
  20. <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  21. <filter class="solr.LowerCaseFilterFactory"/>
  22. </analyzer>
  23. </fieldType>

配置的分词组件功能如:

  • StandardTokenizerFactory 标准切词器,负责切分分词汇
  • StopFilterFactory 停用词过滤器,过滤类似 “the”、“are”这种停用词
  • SynonymGraphFilterFactory 近义词过滤器
  • FlattenGraphFilterFactory 配合上述近义词过滤器完成近义词的过滤替换处理
  • LowerCaseFilterFactory 小写过滤器

例如有句子description为: “A contented mind is the greatest blessing a man can enjoy in this world”
按照分词的短语查询如下:

  1. SolrQuery solrQuery = new SolrQuery("description:\"greatest blessing\"");
  2. 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 配置文件。主要配置如下:

  1. <fieldType name="text_ik" class="solr.TextField">
  2. <analyzer type="index">
  3. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
  4. </analyzer>
  5. <analyzer type="query">
  6. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
  7. </analyzer>
  8. </fieldType>

配置这个类型后,只要定义字段的类型为 “text_ik”,那么它就可以默认按照中文分词了。useSmart表示是否开启智能分词,智能分词会根据分词语法分词后,根据一些规则进一步挑选更合理的词汇,例如最长的完整词汇等规则。我们可以在Solr WebUI里尝试分词效果,如下:

index阶段 useSmart=false,效果如下:

index-usesmart-false

query阶段 useSmart=true,效果如下:

query-usesmart-true

中文分词的词库扩展

如需扩展ik的中午字典库,请联系“云HBase答疑”客服。
如果还有自定义的分词器,也可以联系“云HBase答疑”客服 咨询如何集成。