中文分析器
1 中文分析器介绍
1.IKAnalyzer的使用方法
a.把IKAnalyzer的jar添加到工程中。如图所示:
b.把配置文件和扩展词典添加到工程的Classpath目录下。如图所示:
添加到src目录下,如图所示:
注意事项:扩展词典严禁Windows记事本编辑的,保证扩展词典的编码格式是UTF-8的。
因为Window记事本UTF+BOM的编码格式,不会生效。
扩展词典:添加一些新词。
停用词词典:敏感词汇或者是无意义的词。
2 中文分析器测试
测试代码如下:
package com.txw.lucene;
import org.apache.commons.io.FileUtils;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.*;
import org.apache.lucene.index.*;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.io.File;
/**
* 测试类
* @author:Adair
* @QQ:1578533828
* @date 2020-07-10 23:30
*/
@SuppressWarnings("all") // 注解警告信息
public class LuceneFirst {
/**
* 中文分析器
* @throws Exception
*/
@Test
public void testTokenStream() throws Exception {
//1)创建一个Analyzer对象,StandardAnalyzer对象
// Analyzer analyzer = new StandardAnalyzer();
Analyzer analyzer = new IKAnalyzer();
//2)使用分析器对象的tokenStream方法获得一个TokenStream对象
TokenStream tokenStream = analyzer.tokenStream("", "https://baike.baidu.com/Lucene - Java 公安局全文搜索框架Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。");
//3)向TokenStream对象中设置一个引用,相当于数一个指针
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//4)调用TokenStream对象的rest方法。如果不调用抛异常
tokenStream.reset();
//5)使用while循环遍历TokenStream对象
while(tokenStream.incrementToken()) {
System.out.println(charTermAttribute.toString());
}
//6)关闭TokenStream对象
tokenStream.close();
}
}
运行如图所示:
在停用词典加入如图所示的词: 声明添加停用词典和扩展词典的文件,需要重新打开IEDA才能生效!
运行如图所示:
3 在代码中使用中文分析器
源代码如下:
IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig();
修改之后的代码如下:
IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer());
IndexWriter indexWriter = new IndexWriter(directory, config);
如图所示:
运行之前把如图所示的文件删除。
运行结果如图所示:
使用Luke工具查看如图所示:
4 常用的field使用
是否分析:是否对域的内容进行分词处理。前提是我们要对域的内容进行查询。
是否索引:将Field分析后的词或整个Field值进行索引,只有索引方可搜索到。比如:商品名称、商品简介分析后进行索引,订单号、身份证号不用分析但也要索引,这些将来都要作为查询条件。
是否存储:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取。比如:商品名称、订单号,凡是将来要从Document中获取的Field都要存储。
是否存储的标准:是否要将内容展示给用户。
4.1 添加文档代码实现
修改的代码如下:
运行结果如图所示:
打开Luke如图所示的界面:选择文件路径并点击ok.
点击Documents选择序列号可以size的大小。