Lucene 快速入门
来源:互联网 发布:papi酱人气下滑 知乎 编辑:程序博客网 时间:2024/06/05 11:32
Lucene使得全文索引这项技术活变得非常简单,我将用5分钟做个快速展示。
1.建立索引 这个例子展示的是在内存中为几个String建立索引
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_44);Directory index = new RAMDirectory();IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer);IndexWriter w = new IndexWriter(index, config);addDoc(w, "Lucene in Action", "193398817");addDoc(w, "Lucene for Dummies", "55320055Z");addDoc(w, "Managing Gigabytes", "55063554A");addDoc(w, "The Art of Computer Science", "9900333X");w.close();
来看addDoc()方法:
private static void addDoc(IndexWriter w, String title, String isbn) throws IOException { Document doc = new Document(); doc.add(new TextField("title", title, Field.Store.YES)); doc.add(new StringField("isbn", isbn, Field.Store.YES)); w.addDocument(doc);}
2.查询 从标准输入读取查询信息,建立Lucene的Query对象
String querystr = args.length > 0 ? args[0] : "lucene";Query q = new QueryParser(Version.LUCENE_44, "title", analyzer).parse(querystr);
3.查找 利用2产生的Query对象建立Searcher对象在索引中查找
int hitsPerPage = 10;IndexReader reader = IndexReader.open(index);IndexSearcher searcher = new IndexSearcher(reader);TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);searcher.search(q, collector);ScoreDoc[] hits = collector.topDocs().scoreDocs;
4.显示 显示查找结果
System.out.println("找到 " + hits.length + " hits.");for(int i=0;i<hits.length;++i) { int docId = hits[i].doc; Document d = searcher.doc(docId); System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title"));}
完整的Java代码:
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.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.TopScoreDocCollector;import org.apache.lucene.store.Directory;import org.apache.lucene.store.RAMDirectory;import org.apache.lucene.util.Version;import java.io.IOException;public class HelloLucene { public static void main(String[] args) throws IOException, ParseException { // 0. analyzer // StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_44); // 1. index Directory index = new RAMDirectory(); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer); IndexWriter w = new IndexWriter(index, config); addDoc(w, "Lucene in Action", "193398817"); addDoc(w, "Lucene for Dummies", "55320055Z"); addDoc(w, "Managing Gigabytes", "55063554A"); addDoc(w, "The Art of Computer Science", "9900333X"); w.close(); // 2. query String querystr = args.length > 0 ? args[0] : "lucene"; Query q = new QueryParser(Version.LUCENE_44, "title", analyzer).parse(querystr); // 3. search int hitsPerPage = 10; IndexReader reader = DirectoryReader.open(index); IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true); searcher.search(q, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; // 4. display System.out.println("找到 " + hits.length + " hits."); for(int i=0;i<hits.length;++i) { int docId = hits[i].doc; Document d = searcher.doc(docId); System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title")); } reader.close(); } private static void addDoc(IndexWriter w, String title, String isbn) throws IOException { Document doc = new Document(); doc.add(new TextField("title", title, Field.Store.YES)); doc.add(new StringField("isbn", isbn, Field.Store.YES)); w.addDocument(doc); }}
- lucene快速入门
- Lucene 快速入门
- Lucene 快速入门
- Lucene第一篇【介绍Lucene、快速入门】
- 搜索引擎lucene超快速入门
- 搜索引擎lucene超快速入门
- Apache Lucene 快速入门指南
- lucene快速入门---一个例子读懂
- 全文检索Lucene(一)---快速入门
- Lucene Inverted index(倒排索引)原来快速入门
- Lucene Inverted index(倒排索引)原来快速入门
- Lucene.NET使用入门(一)【实现快速搜索】
- lucene 入门
- lucene入门
- lucene入门
- Lucene入门
- LUCENE入门
- Lucene入门
- 逆波兰式(中缀表达式转成后缀表达式)
- 文件操作函数小结
- UIGestureRecognizer学习笔记
- 【重点】什么时候用静态方法
- Mongodb的生僻问题分析
- Lucene 快速入门
- 求已知二叉树的面积
- Eclipse开发Android程序如何在手机上运行
- paip.c++ bcb string 转换操作大总结.
- urlrewrite
- 又遇 oracle RAC 经常宕机分析
- spring datasource的缺包异常
- jqueryeasyui-datagrid-扩展-支持单元格编辑
- paip.c++ tree parse tpath解析器