Solr通过特殊字符分词实现自定义分词器详解

  

  

我们在对英文句子分词的时候,一般采用采用的分词器是WhiteSpaceTokenizerFactory,有一次因业务要求,需要根据某一个特殊字符(以逗号分词,以竖线分词)分词。感觉这种需求可能与WhiteSpaceTokenizerFactory相像,于是自己根据Solr源码自定义了分词策略。

  

  

有一次,我拿到的数据都是以竖线“|”分隔,分词的时候,需要以竖线为分词单元,比如下面的这一堆数据:
  

  

 Solr通过特殊字符分词实现自定义分词器详解“> <br/>
  </p>
  <p>有可能你拿到的是这样的数据,典型的例子就是来自csv文件的数据,格式和下面这种类似:<br/>
  </p>
  <p> <img src=

  

  

在Solr的schema.xml文件中,有这样的配置

        & lt; fieldType name=" text_ws " class=" solr。文本框”positionIncrementGap=" 100 "比;   & lt; analyzer>   & lt;记号赋予器类=" solr.WhitespaceTokenizerFactory "/比;   & lt;/analyzer>   & lt;/fieldType>      

对于字段类型text_ws,指定了一个分词器工厂WhitespaceTokenizerFactory,根据这个类,可以实现通过空格来分词,那么我通过竖线分词的代码应该与之类似。

  

  

在Java工程中引入如下jar包:

        & lt; dependency>   & lt; groupId> org.apache.solr   & lt; artifactId> solr-core   & lt; version> 6.0.0   & lt;/dependency>      

参照WhitespaceTokenizerFactory的源码,写一个自己的MyVerticalLineTokenizerFactory,内容基本不变:

        包com.trainning.project.custom;      进口java.util.Arrays;   进口java.util.Collection;   进口java.util.Map;      进口org.apache.lucene.analysis.Tokenizer;   进口org.apache.lucene.analysis.core.UnicodeWhitespaceTokenizer;   进口org.apache.lucene.analysis.util.TokenizerFactory;   进口org.apache.lucene.util.AttributeFactory;/* *   * @author JiangChao   * @date 2017年4月2日下午3:41:13   */公开课MyVerticalLineTokenizerFactory延伸TokenizerFactory {   公共静态最终字符串RULE_JAVA=癹ava”;   公共静态最终字符串RULE_UNICODE=皍nicode”;   私有静态最终CollectionRULE_NAMES=数组。asList (RULE_JAVA RULE_UNICODE);      私人最终字符串的规则;/* *创建一个新的MyVerticalLineTokenizerFactory */公共MyVerticalLineTokenizerFactory (Map<字符串,String>args) {   超级(args);      规则=得到(args,“规则”,RULE_NAMES RULE_JAVA);      如果(! args.isEmpty ()) {   把新IllegalArgumentException(“未知参数:”+ args);   }   }      @Override   公共记号赋予器创建(AttributeFactory工厂){   开关(规则){   案例RULE_JAVA:   返回新MyVerticalLineTokenizer(工厂);   案例RULE_UNICODE:   返回新UnicodeWhitespaceTokenizer(工厂);   默认值:   把新AssertionError ();   }   }   }      

具体做分词的MyVerticalLineTokenizer代码如下

        包com.trainning.project.custom;      进口org.apache.lucene.analysis.util.CharTokenizer;   进口org.apache.lucene.util.AttributeFactory;/* *   * @author JiangChao   * @date 2017年4月2日下午9:46:18   */公开课MyVerticalLineTokenizer延伸CharTokenizer {      公共MyVerticalLineTokenizer () {      }   公共MyVerticalLineTokenizer (AttributeFactory工厂){   超级(工厂);   }/* *收集>/* *收集>   & lt; fieldType name=皏ertical_text”class=皊olr.TextField”比;   & lt; analyzer>   & lt;记号赋予器类=" com.trainning.project.custom.MyVerticalLineTokenizerFactory "/比;   & lt;/analyzer>   & lt;/fieldType>   & lt;字段名="自定义" type=" vertical_text "索引=" true "=癴alse”/存储在      

注意这里的类是刚才自己写的分词器的完整类名。

  

打开Solr主页,在分析页面测试一下,是否实现了预期?

  

<>强源码下载:

  

GitHub:下载地址

  

本地下载:链接地址

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

Solr通过特殊字符分词实现自定义分词器详解