lucene第一天

来源:互联网 发布:音乐加快软件 编辑:程序博客网 时间:2024/06/05 10:55

一、创建索引

package com.cc.lucence;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.StringField;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.junit.Test;import java.io.IOException;import java.nio.file.FileSystems;import java.nio.file.Path;public class CreateIndex {    //设置创建索引的目录,在当前工程的根目录下的index下    public static final String PATH = "./index";    //分词器    public Analyzer analyzer = null;    public CreateIndex() {        analyzer = new StandardAnalyzer();    }    public void createIndex() {        Path path = FileSystems.getDefault().getPath(PATH);        try {            Directory directory = FSDirectory.open(path);            IndexWriterConfig config = new IndexWriterConfig(analyzer);            IndexWriter indexWriter = new IndexWriter(directory, config);            Document document = new Document();            document.add(new StringField("id","1", Field.Store.YES));            document.add(new StringField("name","jack", Field.Store.YES));            document.add(new StringField("desc","我市社会主义接班人", Field.Store.YES));            indexWriter.addDocument(document);            indexWriter.close();        } catch (IOException e) {            e.printStackTrace();        }    }    @Test    public void test1(){        CreateIndex index = new CreateIndex();        index.createIndex();    }}

二、读取索引文件

package com.cc.lucence;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.ParallelLeafReader;import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;import org.apache.lucene.queryparser.classic.ParseException;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.store.Directory;import org.apache.lucene.store.FSDirectory;import org.junit.Test;import java.io.IOException;import java.nio.file.FileSystems;import java.nio.file.Path;public class ReaderIndex {    public static final String PATH = "./index";    public Analyzer analyzer = null;    public ReaderIndex() {        analyzer = new StandardAnalyzer();    }    public void readIndex() {        Path path = FileSystems.getDefault().getPath(PATH);        try {            Directory directory = FSDirectory.open(path);            IndexReader reader = DirectoryReader.open(directory);            IndexSearcher searcher = new IndexSearcher(reader);            //这个数组的含义是关键字在哪几个字段内,避免全局查找            String[] s = {"name","desc"};            MultiFieldQueryParser parser = new MultiFieldQueryParser(s, analyzer);            Query query = parser.parse("jack");            TopDocs topDocs = searcher.search(query, 2);            ScoreDoc[] docs = topDocs.scoreDocs;            for(ScoreDoc d:docs){                int doc = d.doc;                Document doc1 = searcher.doc(doc);                String id = doc1.get("id");                String name = doc1.get("name");                String desc = doc1.get("desc");                System.out.println(id+","+name+","+desc);            }        } catch (IOException e) {            e.printStackTrace();        } catch (ParseException e) {            e.printStackTrace();        }    }    @Test    public void test1(){        ReaderIndex readerIndex = new ReaderIndex();        readerIndex.readIndex();    }}

原创粉丝点击