Lucene搜索引擎入门写法
需要的jar包:
<dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>${lucene-version}</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>${lucene-version}</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>${lucene-version}</version> </dependency>
其中: <lucene-version>4.10.2</lucene-version>
package com.power.lencene; import java.io.File; 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.FieldType; 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.MultiFieldQueryParser; 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.Sort; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; /* 作者Gary Huang 博客地址 :http://blog.csdn.net/hfmbook 邮箱:[email protected]**/ public class LenceneDemo { static String path = "d:/lencene" ; public static void main(String[] args) { try { String keyword = "文字Score" ; Analyzer analyzer = new StandardAnalyzer(); Directory directory = FSDirectory.open(new File(path)) ; IndexReader indexReader = DirectoryReader.open(directory) ; IndexSearcher indexSearcher = new IndexSearcher(indexReader); QueryParser queryParser = new MultiFieldQueryParser(new String[] { "content" },analyzer); Query query = queryParser.parse(keyword); Sort sort = new Sort() ; TopDocs topDocs = indexSearcher.search(query, 5 , sort); ScoreDoc[] scoreDoces = topDocs.scoreDocs; for(ScoreDoc scoreDoc : scoreDoces){ int docID = scoreDoc.doc ; Document document = indexSearcher.doc(docID); System.out.println( document.get("id") ) ; System.out.println( document.get("content") ) ; } indexReader.close(); } catch (Exception e) { e.printStackTrace(); } } public static void writeIndex(){ try { Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LATEST, analyzer); Directory directory = FSDirectory.open(new File(path)) ; IndexWriter iwriter = new IndexWriter(directory, indexWriterConfig) ; Document doc = new Document(); FieldType fieldType = new FieldType(); fieldType.setIndexed(true); fieldType.setStored(true); doc.add(new Field("id", "1", fieldType ) ) ; doc.add(new Field("content", "Lucene文字这个相关度排序是基于内部的Score和DocID,Score又基于关键词的内部评分和做索引时的boost。默认Score高的排前面,如果Score一样,.”", fieldType)); iwriter.addDocument(doc); iwriter.close() ; } catch (Exception e) { e.printStackTrace(); } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。