利用Lucene实现一个简单的布尔搜索
来源:互联网 发布:爱丽小屋淘宝官方旗舰 编辑:程序博客网 时间:2024/05/01 14:41
在布尔查询的对象中,包含一个子句的集合,各个子句间都是如“与”、“或”这样的布尔逻辑。Lucene中所遇到的各种复杂查询,最终都可以表示成布尔型的查询。下面代码就是实现了一个简单的布尔查询。
package LuceneSearch;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.Term;import org.apache.lucene.search.BooleanClause;import org.apache.lucene.search.BooleanQuery;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.TermQuery;/** * 布尔搜索测试 * @author sdu20 * */public class BooleanQueryTest {static final String INDEX_STORE_PATH = "E:\\编程局\\Java编程处\\Index\\";public static void main(String[] args) {// TODO Auto-generated method stubtry{IndexWriter writer = new IndexWriter(INDEX_STORE_PATH,new StandardAnalyzer(),true);writer.setUseCompoundFile(false);//创建8个文档Document doc1 = new Document();Document doc2 = new Document();Document doc3 = new Document();Document doc4 = new Document();Document doc5 = new Document();Document doc6 = new Document();Document doc7 = new Document();Document doc8 = new Document();Field f1 = new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,Field.Index.TOKENIZED);Field f2 = new Field("bookname","英雄儿女",Field.Store.YES,Field.Index.TOKENIZED);Field f3 = new Field("bookname","浮生六记",Field.Store.YES,Field.Index.TOKENIZED);Field f4 = new Field("bookname","太平广记",Field.Store.YES,Field.Index.TOKENIZED);Field f5 = new Field("bookname","文化苦旅",Field.Store.YES,Field.Index.TOKENIZED);Field f6 = new Field("bookname","白夜行",Field.Store.YES,Field.Index.TOKENIZED);Field f7 = new Field("bookname","白毛女",Field.Store.YES,Field.Index.TOKENIZED);Field f8 = new Field("bookname","子不语",Field.Store.YES,Field.Index.TOKENIZED);doc1.add(f1);doc2.add(f2);doc3.add(f3);doc4.add(f4);doc5.add(f5);doc6.add(f6);doc7.add(f7);doc8.add(f8);writer.addDocument(doc1);writer.addDocument(doc2);writer.addDocument(doc3);writer.addDocument(doc4);writer.addDocument(doc5);writer.addDocument(doc6);writer.addDocument(doc7);writer.addDocument(doc8);writer.close();System.out.println("创建索引成功");IndexSearcher searcher = new IndexSearcher(INDEX_STORE_PATH);//创建两个词条对象Term t1 = new Term("bookname","生");Term t2 = new Term("bookname","记");TermQuery q1 = new TermQuery(t1);TermQuery q2 = new TermQuery(t2);BooleanQuery query = new BooleanQuery();query.add(q1,BooleanClause.Occur.MUST);query.add(q2,BooleanClause.Occur.MUST);Hits hits = searcher.search(query);for(int i = 0;i<hits.length();i++){System.out.println(hits.doc(i));}System.out.println("搜索成功");}catch(Exception e){System.out.println(e.getStackTrace());}}}
BooleanClause.Occur类主要有3种表示,即MUST、MUST_NOT和SHOULD。MUST与MUST_NOT不难理解,一看名字就知道是什么意思,而SHOULD是一个比较特殊的约束,当它与MUST联用时,它将失去意义。检索的结果为MUST子句的检索结果。当它与MUST_NOT联用时,SHOULD的功能就与MUST一样,就退变为MUST和MUST_NOT的查询结果。当SHOULD与SHOULD联用时,它们就表示一种“或”关系。最终检索结果为所有检索子句的检索结果的并集。
上面代码就是查询索引中有“生”字和“记”字的文档,程序运行结果截图如下
索引目录文件夹下截图如下
0 0
- 利用Lucene实现一个简单的布尔搜索
- 用Lucene做一个简单的Java搜索工具
- lucene搜索简单的实例
- lucene一个TermFilter的简单实现 - 原理篇
- 一个简单的二叉搜索树实现
- 一个简单的lucene例子
- 一个简单的Lucene例子
- 怎么利用Lucene.Net搜索结果,实现伪静态的文章列表
- 搜索篇:lucene的简单实例
- lucene入门-简单的WEB搜索界面
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用avalon 实现一个简单的成绩单
- 利用Python实现简单的相似图片搜索的教程
- 利用 Lucene 实现高级搜索功能并创建web应用程序
- hdu3088WORM BFS
- 动态规划练习一 05:吃糖果
- 数据库系统单表查询笔记
- Linux驱动修炼之道-SPI驱动框架源码分析(上)
- 数组
- 利用Lucene实现一个简单的布尔搜索
- CSU1329 一行盒子(模拟链表)
- InvokeRequired和Invoke
- parseInt 进制转换
- C 信道安全
- 题目1002:Grading
- (3)ARM40-A5板应用程序——ARM40上使用sqlite3的demo
- Qt QLabel文字自动换行 Qwidget设置item不可拖动
- Linux驱动修炼之道-SPI驱动框架源码分析(中)