以maven项目为例,首先先引入jar包
<!--Lucene核心库--> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>7.2.1</version> </dependency> <!-- Lucene解析库--> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>7.2.1</version> </dependency> <!--Lucene附加的分析库--> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>7.2.1</version> </dependency> <!-- ikAnalyzer中文分词器--> <dependency> <groupId>com.lucene</groupId> <artifactId>ikAnalyzer</artifactId> <version>6.5.0</version> </dependency> <!--Lucene高亮显示--> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-highlighter</artifactId> <version>7.2.1</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-memory</artifactId <version>7.2.1</version> </dependency>View Code
引入包之后就是创建索引,创建索引有两种方式,一种创建内存索引库,另一种是创建文件索引库。两种方法各有各的好处:
1. 内存索引库:好处:读取快。缺点:内存使用率高,不具备持久能力。
2. 文件索引库:好处:将索引保存在本地磁盘上,便于长久保存。缺点:相比较而言读取慢。
内存索引库创建器方法:
Directory index = new RAMDirectory(); // IKAnalyzer6.5是一款很好的分词器,可以根据需要选择不同的分词器 IKAnalyzer analyzer = new IKAnalyzer(); // analyzer为分词器对象,这里不多赘述 IndexWriterConfig config = new IndexWriterConfig(analyzer); // 索引创建器 IndexWriter writer = new IndexWriter(index, config);
文件索引库创建器方法:
// path为保存文件路径 Path类型 Directory index = FSDirectory.open(path); IKAnalyzer analyzer = new IKAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter writer = new IndexWriter(index, config);
创建了索引创建器后就是对数据进行生成索引(后续都默认创建文件夹索引库)先上代码
List<String> dataList = new ArrayList<>(); dataList.add("小米三星华为"); dataList.add("苹果小米三星"); dataList.add("字节腾讯阿里"); dataList.add("字节苹果华为"); for (String s:dataList){ Document document = new Document(); document.add(new TextField("co",s, Field.Store.YES)); writer.addDocument(document); } writer.close();
Document类:类似于数据库里的一行,是索引的基本单位,一条数据可以有多个docement。
TextField:相当于数据库的字段。第一个属性name相当于键,第二个属性value相当于值,第三个属性Store store 有三种:Store.YES 保存 可以查询 可以打印内容;Store.NO 不保存 可以查询 不可打印内容 由于不保存内容所以节省空间 ;Store.COMPRESS 压缩保存 可以查询 可以打印内容 可以节省生成索引文件的空间。
到此,索引就创建成功了可以在文件夹内看到创建好的索引内容。
源代码:
public class LuceneDemo { public static void main(String[] args) throws IOException { File file = new File("D:\\lucene"); Directory index = FSDirectory.open(file.toPath()); IKAnalyzer analyzer = new IKAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(index, config); List<String> dataList = new ArrayList<>(); dataList.add("小米三星华为"); dataList.add("苹果小米三星"); dataList.add("字节腾讯阿里"); dataList.add("字节苹果华为"); for (String s:dataList){ Document document = new Document(); document.add(new TextField("co",s, Field.Store.YES)); writer.addDocument(document); } writer.close(); } }View Code