分词器作用
在创建索引的时候需要用法哦分词器,在使用字符串搜索的时候也会用到分词器,并且这两个地方要使用同一个分词器,否则可能会搜索不出来结果;
分词器的作用是把一段文本中的词按规则取出所包含的所有词,对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所有对于不同语言的规则,要有不同的分词器;
分词器原理
分词器为中文分词器和英文分词器:
英文分词器是按照词汇切分,同时作词干提取,也就是将单词末尾的变化还原,使其能搜索出来,另外各种分词器对英文都支持的比较好;
中文分词器很多实现方式,实现原理基本差不多,都是Analyzer的子类:
标椎分词器:也叫单字分词,将中文一个字一个字的分词; new StandardAnalyzer();
简单分词器:根据标点符号进行分词; new SimpleAnalyzer();
二分法分词器:按照两个字进行分词; new CJKAnalyzer();
停用词分词器:和简单分词器很像,根据被忽略停用的词进行分词; new StopAnalyzer();
空格分词器:根据空格进行分词; new WhitespaceAnalyzer();
IK中文分词器:分为两种实现,一种采用智能切分,另一种是最细粒度切分算法; new IKAnalyzer();
案例
Lucene默认的分词器效果(标椎分词器)
package com.wn.Analyzer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import java.io.IOException;
/*标椎分词器*/
public class testTokenStream {
public static void main(String[] args)throws IOException {
//创建一个标椎分析器对象
Analyzer analyzer=new StandardAnalyzer();
//获得tokenStream对象
//参数一:域名