Lucence搜索引擎

添加須要索引的文件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"));
        }
    }

}  

相關文章
相關標籤/搜索