Analyzer:包含两个核心组件,Tokenizer 以及 TokenFilter。
- Tokenizer:用于将field字段的内容切割成单个词或token,进行分词处理;
- TokenFilter:接收tokenizer分词输出的token流,进行转化过滤处理。
- Analyzer:Tokenizer和TokenFilter组成分词器,对输入的文档和输入的查询文本进行处理,得到的结果被存储成为索引字典用来匹配查询输入条件。
Analyzer:针对语言的多样性,市面上提供了多种不同的分析器以适应于不同语言的分词。 英文分词器包括:
- WhiteSpaceAnalyzer:仅去除空格,对字符没有lowercase化,不支持中文,也不支持破折号分词。
- SimpleAnayzer:功能强于WhiteSpaceAnalyzer,提供对字符的lowercase化,不支持中文,保留停用词。
- StopAnalyzer:功能强于SimpleAnayzer,增加了停用词功能,不支持中文。
- StandardAnalyzer:英文处理能力增强,保留了email地址及XY&Z的形式,支持中文采用单词分词。 中文分词器包括:
- ChineseAnalyzer:一个汉字是一个token。
- CJKAnalyzer:两个汉字是一个token。(Lucene自带)
- SmartChineseAnalyzer:每一个词语是一个token。
Field Lucene包含多种Field,不同种类的Field在索引、存储、分词方面的策略均有不同。
- StringField:字符串类型Field, 不分词, 作为一个整体进行索引(如: 身份证号, 订单编号), 是否需要存储由Store.YES或Store.NO决定
- new StringField("sField", StringField, Field.Store.YES);
- LongField:Long数值型Field代表, 分词并且索引(如: 价格), 是否需要存储由Store.YES或Store.NO决定
- new LongField("lField", LongField, Field.Store.YES);
- StoredField:构建不同类型的Field, 不分词, 不索引, 要存储. (如: 商品图片路径)
- new StoredField("sField2", StoredField, Field.Store.YES);
- TextField:文本类型Field, 分词并且索引, 是否需要存储由Store.YES或Store.NO决定
- new TextField("tField", TextField, Field.Store.YES);
- Field:自定义是否存储、索引、分类、设置权重等
- FieldType fieldType = new FieldType();// 重构FieldType类
- fieldType.setIndexed(true);// set 是否索引
- fieldType.setStored(true);// set 是否存储
- fieldType.setTokenized(true);// set 是否分词
- fieldType.setOmitNorms(false);// set 是否可以设置权重
- Field field = new Field("Field", Field, fieldType);
FIeld特性
- 是否分词:根据业务需要来判断是否进行分词,分词的目的是为了索引,如名称、描述等,分词后可以用关键词进行索引;另外有些属性不需要分词,需要精准查询,如身份证号,编号等
- 是否索引:需要被用户关键词搜索的都需要建立索引,不需要被索引的可直接存储,不被索引查询
- 是否存储:需要给用户返回的信息都需要存储,如不存储则无法返回
TokenStreamComponents:包含Tokenizer、TokenStream和一个TokenFilter,用于对进行传入的Field依据其各项属性进行处理,并返回TokenStream。
TokenStream tok = new StandardFilter(src); tok = new LowerCaseFilter(tok); tok = new StopFilter(tok, stopwords);
版权声明:本文为qq_40334719原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。