所有的代码都是基于maven管理的.
环境:
maven: 3.3.3
eclipse
jdk7, tomcat7, mac系统
pom.xml展示
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zero.lucene</groupId>
<artifactId>Lucene</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>5.1.0</version>
</dependency>
<!-- 中文分词 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-smartcn</artifactId>
<version>5.1.0</version>
</dependency>
<!-- 关键词高亮 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</project>
创建索引
package com.zero.lucene;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Paths;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;
/**
* 建立索引
* @author samuel
*/
public class Indexer {
private IndexWriter writer;
/**
* 实例化写入索引的对象
* @param saveDir 索引写入的位置(建立好的索引存放的位置)
* @throws Exception
*/
public Indexer(String saveDir) throws Exception{
FSDirectory fsdDir = FSDirectory.open(Paths.get(saveDir));
// 标准分词器
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig conf = new IndexWriterConfig(analyzer);
writer = new IndexWriter(fsdDir, conf);
}
/**
* 关闭写入流
* @throws IOException
*/
public void close() throws IOException {
writer.close();
}
public void index(String dataDir) throws Exception {
// 需要索引数据的目录
/**
* 1. 查询到目录下所有的文件
* 2. 对每个文件进行建立索引
*/
// String dataDir = "/Users/samuel/Documents/lucene/lucene/";
// 1
File[] files = new File(dataDir).listFiles();
for (File file : files) {
// 2 对每个文件进行索引
indexFile(file);
}
System.out.println(writer.numDocs());
writer.close();
}
private void indexFile(File file) throws IOException {
Document doc = getDcoument(file);
writer.addDocument(doc);
}
private Document getDcoument(File file) throws FileNotFoundException {
Document doc = new Document();
doc.add(new TextField("contents", new FileReader(file)));
doc.add(new TextField("fileName", file.getName(), Store.YES));
return doc;
}
public static void main(String[] args) {
String saveDir = "/Users/samuel/Documents/lucene";
String dataDir = "/Users/samuel/Documents/lucene/lucene";
Indexer indexer = null;
try {
indexer = new Indexer(saveDir);
indexer.index(dataDir);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
indexer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
一个原生态的Lucene创建索引就这样OK啦.