Lucene 6.5 demo

xiaoxiao2021-02-28  116

根据Lucene 6.5及JDK 1.8最新版本,写的Demo

package com.lyl.lucene.lucene; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.nio.file.FileSystems; import java.nio.file.Path; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; 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.index.IndexableField; import org.apache.lucene.index.IndexableFieldType; 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.store.FSDirectory; import org.apache.lucene.util.BytesRef; public class LuceneTest { public void createIndex(){ Path path = FileSystems.getDefault().getPath("F://lucene/index"); try { //1:指定索引库的地址 FSDirectory directory = FSDirectory.open(path); //2 创建分词器,标准分词器 StandardAnalyzer analyzer = new StandardAnalyzer(); //3:创建IndexWriterConfig IndexWriterConfig config = new IndexWriterConfig(analyzer); //4:创建IndexWriter IndexWriter writer = new IndexWriter(directory, config); writer.deleteAll();//清除以前的index File file = new File("F://lucene/data"); File[] listFiles = file.listFiles(); for (File f : listFiles) { Document document = new Document(); document.add(new TextField("content",new FileReader(f))); document.add(new TextField("name", f.getName(), Field.Store.YES)); document.add(new TextField("path",f.getAbsolutePath(),Field.Store.YES)); writer.addDocument(document); } writer.close(); } catch (IOException e) { e.printStackTrace(); } } public void doSearch(){ Path path = FileSystems.getDefault().getPath("F://lucene/index"); try { //1:指定索引库的地址 FSDirectory directory = FSDirectory.open(path); // 2、创建IndexReader DirectoryReader reader = DirectoryReader.open(directory); System.out.println(reader.getVersion()); System.out.println(reader.maxDoc()); System.out.println(reader.numDocs()); // 3、根据IndexReader创建IndexSearch IndexSearcher searcher = new IndexSearcher(reader); StandardAnalyzer analyzer = new StandardAnalyzer(); // 使用QueryParser搜索时,需要指定分词器,搜索时的分词器要和索引时的分词器一致 // 第一个参数:默认搜索的域的名称 QueryParser parser = new QueryParser("content", analyzer); // 4、创建搜索的Query // 创建Query表示搜索域为content包含hello的文档 Query query = parser.parse("hello"); // 5、根据searcher搜索并且返回TopDocs TopDocs topDocs = searcher.search(query, 10); // 根据查询条件匹配出的记录总数 int count = topDocs.totalHits; System.out.println("匹配出的记录总数:" + count); //6、根据TopDocs获取ScoreDoc对象 ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { int docID = scoreDoc.doc; // 7、根据searcher和ScoreDoc对象获取具体的Document对象 Document doc = searcher.doc(docID); // 8、根据Document对象获取需要的值 System.out.println(doc.get("content")); System.out.println(doc.get("name")); System.out.println(doc.get("path")); } reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
转载请注明原文地址: https://www.6miu.com/read-38813.html

最新回复(0)