Lucene5.x简单示例教程

  1. package zmx.lucene.test;  
  2.   
  3. import org.apache.lucene.analysis.Analyzer;  
  4. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  5. import org.apache.lucene.document.Document;  
  6. import org.apache.lucene.document.Field;  
  7. import org.apache.lucene.document.StringField;  
  8. import org.apache.lucene.document.TextField;  
  9. import org.apache.lucene.index.DirectoryReader;  
  10. import org.apache.lucene.index.IndexReader;  
  11. import org.apache.lucene.index.IndexWriter;  
  12. import org.apache.lucene.index.IndexWriterConfig;  
  13. import org.apache.lucene.queryparser.classic.ParseException;  
  14. import org.apache.lucene.queryparser.classic.QueryParser;  
  15. import org.apache.lucene.search.IndexSearcher;  
  16. import org.apache.lucene.search.Query;  
  17. import org.apache.lucene.search.ScoreDoc;  
  18. import org.apache.lucene.search.TopScoreDocCollector;  
  19. import org.apache.lucene.store.Directory;  
  20. import org.apache.lucene.store.RAMDirectory;  
  21. import org.apache.lucene.util.Version;  
  22.    
  23. import java.io.IOException;  
  24.    
  25. public class LuceneTest {  
  26.   public static void main(String[] args) throws IOException, ParseException {  
  27.         
  28.        Analyzer analyzer = new StandardAnalyzer();  
  29.   
  30.         //将索引存储到内存中  
  31.         Directory directory = new RAMDirectory();  
  32.         //如下想把索引存储到硬盘上,使用下面的代码代替  
  33.         //Directory directory = FSDirectory.open(Paths.get("/tmp/testindex"));  
  34.           
  35.         //写入索引库  
  36.         IndexWriterConfig config = new IndexWriterConfig(analyzer);  
  37.         IndexWriter iwriter = new IndexWriter(directory, config);  
  38.   
  39.         String[] texts = new String[]{  
  40.             "Mybatis分页插件 - 示例",  
  41.             "Mybatis 贴吧问答 第一期",  
  42.             "Mybatis 示例之 复杂(complex)属性(property)",  
  43.             "Mybatis极其(最)简(好)单(用)的一个分页插件",  
  44.             "Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题",  
  45.             "Mybatis 示例之 foreach (下)",  
  46.             "Mybatis 示例之 foreach (上)",  
  47.             "Mybatis 示例之 SelectKey",  
  48.             "Mybatis 示例之 Association (2)",  
  49.             "Mybatis 示例之 Association"  
  50.         };  
  51.   
  52.         for (String text : texts) {  
  53.             Document doc = new Document();  
  54.            // doc.add(new Field("fieldname", text, TextField.TYPE_STORED));  
  55.             doc.add(new TextField("title", text, Field.Store.YES));    
  56.             doc.add(new StringField("isbn", ""+String.valueOf(Math.random()), Field.Store.YES));  
  57.   
  58.             iwriter.addDocument(doc);  
  59.         }  
  60.         iwriter.close();  
  61.   
  62.         //读取索引并查询  
  63.         DirectoryReader reader = DirectoryReader.open(directory);  
  64.         IndexSearcher isearcher = new IndexSearcher(reader);  
  65.         //解析一个简单的查询  
  66.         QueryParser parser = new QueryParser("title", analyzer);  
  67.         Query query = parser.parse("foreach");  
  68.         ScoreDoc[] hits = isearcher.search(query, 1000).scoreDocs;  
  69.         //迭代输出结果  
  70.         for (int i = 0; i < hits.length; i++) {  
  71.             Document hitDoc = isearcher.doc(hits[i].doc);  
  72.             System.out.println(hitDoc.get("title"));  
  73.             System.out.println(hitDoc.get("isbn"));  
  74.         }  
  75.         reader.close();  
  76.         directory.close();  
  77.   
  78.   }  
  79. }  

运行结果:

Mybatis 示例之 foreach (下)
0.8654220005188332
Mybatis 示例之 foreach (上)
0.4180114705503467

Lucene API :

org.apache.lucene.analysis

定义了从Reader转换为TokenStream的抽象AnalyzerAPI,主要就是分词器。提供了一些默认的实现,包含StopAnalyzer和基于文法的StandardAnalyzer。中文分词可以参考中文分词库 IKAnalyzer

org.apache.lucene.codecs

提供了一个抽象的编码和解码的倒排索引结构,还提供了一些不同的实现可以应用于不同的程序需求。

org.apache.lucene.document

提供了一个简单的Document类。一个文档只是一组命名的字段,它的值可以是字符串或者Reader的实例。

org.apache.lucene.index

提供了两个主要的类:IndexWriter用于创建和给文档添加索引,IndexReader用于访问索引数据。

org.apache.lucene.search

提供代表查询的数据结构(例如TermQuery用于单独的关键字查询,PhraseQuery用于短句,BooleanQuery用于布尔联合查询)。
IndexSearcher将查询转换为TopDocs。一些QueryParsers提供了从字符串或者xml生成查询结构的功能。

org.apache.lucene.store

定义了一个抽象类来存储持久化数据,Directory这是一个由IndexOutputIndexInput分别写和读取的指定文件的集合。提供了多个实现,包括FSDirectory,这个实现使用文件系统目录来存储文件。还有RAMDirectory类实现了文件驻留在内存中的数据结构。

org.apache.lucene.util

包含了一些有用的数据结构和工具类,例如FixedBitSetPriorityQueue

Luncene使用步骤:

  1. 通过添加字段(Field)创建文档(Document);

  2. 创建IndexWriter,通过addDocument()方法添加文档(Document);

  3. 调用QueryParser.parser()方法从字符串生成查询对象;

  4. 创建IndexSearcher并通过search()方法进行查询。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值