1.定义相关变量
private final static String filePath="E:\\workspace\\luceneDemo\\files";
private final static Path indexPath=Paths.get("E:\\workspace\\luceneDemo\\indexStore");
public static Analyzer analyzer = new SmartChineseAnalyzer();
filePath:需要创建索引的源文件地址
indexPath:索引保存地址
analyzer:定义分词器,这里采用lucene自带的中文分词器
2.建立索引
public static void createIndex(){
List<Document> doc = File2DocumentUtil.files2Document(filePath);
try {
/*索引文件采用物理存储*/
FSDirectory directory = FSDirectory.open(indexPath);
/*索引文件内存存储*/
//RAMDirectory directory1 = new RAMDirectory();
//配置indexWriter,写入索引
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter indexWriter=new IndexWriter(directory, config);
//创建之前删除所有索引
indexWriter.deleteAll();
//添加需要建立索引的Document
indexWriter.addDocuments(doc);
//提交写入
indexWriter.commit();
//关闭indexWriter
indexWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.文件转Document方法
public static List<Document> files2Document(String filePath) {
File dir=new File(filePath);
List<Document> list=new ArrayList<>();
for(File file:dir.listFiles()){
Document doc=new Document();
doc.add(new TextField("name", file.getName(), Store.YES));
doc.add(new StringField("path", file.getPath(), Store.YES));
/*设置排序字段*/
doc.add(new NumericDocValuesField("size",file.length()));
doc.add(new StringField("size", String.valueOf(file.length()), Store.YES));
doc.add(new TextField("content", getFileContent(file), Store.YES));
list.add(doc);
}
return list;
}
StringField:不会进行分词操作;
TextField:会进行分词操作。