Lucene7.1.0学习

package com.royarn.luceneNew;

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;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.spell.Dictionary;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;

/**
 *
 * @author lizq_cti_sx
 * @create 2017-12-05 9:45
 * @deprecated
 */
public class IndexProcesser {

    /**
     * 构建索引
     * @throws IOException
     */
    public void addFile() throws IOException {
        final Path path = Paths.get("D:\\Documents\\Downloads\\newIndex");

        Directory directory = FSDirectory.open(path);
        Analyzer analyzer = new StandardAnalyzer();

        IndexWriterConfig config = new IndexWriterConfig(analyzer);
        config.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
        IndexWriter writer = new IndexWriter(directory, config);

        BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\Documents\\Downloads\\bookName.txt")));

        String content = "";

        while ((content = reader.readLine()) != null) {
            Document document = new Document();
            document.add(new TextField("logs", content, Field.Store.YES));
            document.add(new TextField("time", String.valueOf(new Date().getTime()), Field.Store.YES));
            writer.addDocument(document);
        }
        writer.close();
    }

    /**
     *
     * @throws IOException
     * @throws ParseException
     * @description 单一查询条件 &
     */
    public void searchFiles() throws IOException, ParseException {

        String queryStr = "紫罗兰";

        final Path path = Paths.get("D:\\Documents\\Downloads\\newIndex");

        Directory directory = FSDirectory.open(path);
        Analyzer analyzer = new StandardAnalyzer();

        IndexReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);

        //单条件
        QueryParser parser = new QueryParser("logs", analyzer);
        Query query = parser.parse(queryStr);

        TopDocs docs = searcher.search(query, 1);
        long count = docs.totalHits;
        System.out.println("检索总条数:" + count);
        ScoreDoc[] scoreDocs = docs.scoreDocs;
        for (ScoreDoc doc: scoreDocs) {
            Document document = searcher.doc(doc.doc);
            System.out.print("相关度:" + doc.score + "------time:" + document.get("time"));
            System.out.println(document.get("logs"));
        }
    }

    //主函数
    public static void main(String[] args) {

        IndexProcesser processer = new IndexProcesser();
        try {
            processer.addFile();
            processer.searchFiles();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/lzqworkonline/article/details/78750965