添加須要索引的文件java
一、建立索引庫IndexWriterapache
二、根據文件建立文檔Document數組
三、向索引庫中寫入文檔內容app
代碼以下函數
package org.lucence;ui
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;對象
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.FieldType;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;索引
public class Create {
public static void main(String[] args) throws Exception {
//存放源數據
File dirFile = new File("E:/dir");
System.out.println(dirFile);
//存放索引
File indexFile = new File("E:/index");
//加載索引目錄
FSDirectory fsDirectory = FSDirectory.open(indexFile);
Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_40);
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);
config.setOpenMode(OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(fsDirectory, config);
//獲取須要索引的全部文件
File[] files = dirFile.listFiles();
System.out.println(files);
Integer cursor = 1;
for(File file:files){
Document doc = new Document();
if(file.getName().endsWith(".txt")){
//創建索引
doc.add(new StringField("id", String.valueOf(cursor++), Store.YES));
doc.add(new TextField("context", readFile(file),Store.YES));
}
FieldType type = new FieldType();
type.indexed();//索引
type.setStored(true);//存儲
type.setTokenized(true);//標識
//添加到文檔
indexWriter.addDocument(doc);
}
indexWriter.commit();
indexWriter.close();
}
private static String readFile(File file) throws Exception{
StringBuilder str = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
String line = null;
while((line = br.readLine()) != null){
str.append(line);
}
br.close();
return str.toString();
}文檔
}
get
索引搜索
一、建立Directory對象,索引文件夾
二、建立IndexSearch對象,創建查詢(參數是Directory對象)
三、建立QueryParser對象(lucene版本,查詢Field字段,所用分詞器)
四、生成Query對象,由QueryParser對象的parse函數生成(參數是所查的關鍵字)
五、創建TopDocs對象(IndexSearch的search函數,參數是Query查詢對象,)
六、TopDocs對象數組裏存放查詢信息
七、關閉IndexSearch
代碼以下
package org.lucence;
import java.io.File;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
public class Search {
public static void main(String[] args) throws Exception {
File indexFile = new File("E:/index");
FSDirectory fsDirectory = FSDirectory.open(indexFile);
IndexReader indexReader = DirectoryReader.open(fsDirectory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
Query query = new TermQuery(new Term("context","你"));
TopDocs docs = indexSearcher.search(query,5);
System.out.println(docs.getMaxScore());
System.out.println(docs.totalHits);
for(ScoreDoc doc :docs.scoreDocs){
System.out.println(doc.doc);
Document document = indexSearcher.doc(doc.doc);
System.out.println(document.get("context"));
}
}
}