lucene多关键字查询

来源:互联网 发布:免费单机室内设计软件 编辑:程序博客网 时间:2024/04/19 23:36

lucene下进行多个关键字String[]keyWords查询,使用BooleanQuery简单地表示其逻辑关系:

BooleanQuery bquery = new BooleanQuery();bquery.add(Query query, BooleanClause.Occuroccur);

其中,BooleanClause.Occur occur有三种形式,可以构成这些关键字之间与或关系:

BooleanClause.Occur.MUST必须包含,类似于逻辑运算的与BooleanClause.Occur.MUST _NOT必须不包含,类似于逻辑运算的非BooleanClause.Occur.SHOULD可以包含,类似于逻辑运算的或

Example:

在“content”域查找包含“音乐”或“广告”的doc,代码如下:

BooleanQuery bquery = new BooleanQuery();bquery.add(new TermQuery(new Term("content", ” 音乐”)), BooleanClause.Occur.SHOULD);bquery.add(new TermQuery(new Term("content", ” 广告”)), BooleanClause.Occur.SHOULD);TopDocs topDocs = searcher.search(bquery,TOPDOC_NUM);

 多短语搜索参考http://blog.csdn.net/caoxu1987728/article/details/2324201(多谢,学习了!)

前缀搜索:表示A(B|C|D)

IndexSearcher searcher=newIndexSearcher(INDEX_STORE_PATH);       MultiPhraseQuery query=new MultiPhraseQuery();       query.add(new Term("bookname","A"));       Term t1=new Term("bookname","B");       Term t2=new Term("bookname","C");       Term t3=new Term("bookname","D");       query.add(new Term[]{t1,t2,t3});       Hits hits=searcher.search(query);       for(int i=0;i<hits.length();i++)       {           System.out.println(hits.doc(i));       }

后缀搜索:表示(A|B)C

ndexSearcher searcher=newIndexSearcher(INDEX_STORE_PATH);              MultiPhraseQuery query=new MultiPhraseQuery();              Term t1=new Term("bookname","A");       Term t2=new Term("bookname","B");       query.add(new Term[]{t1,t2});              query.add(new Term("bookname","C"));       Hits hits=searcher.search(query);       for(int i=0;i<hits.length();i++)       {           System.out.println(hits.doc(i));       }

混合搜索:表示(A|B)C(D|E)

IndexSearcher searcher=newIndexSearcher(INDEX_STORE_PATH);              MultiPhraseQuery query=new MultiPhraseQuery();              Term t1=new Term("bookname","A");       Term t2=new Term("bookname","B");       query.add(new Term[]{t1,t2});              query.add(new Term("bookname","C"));              Term t3=new Term("bookname","D");       Term t4=new Term("bookname","E");       query.add(new Term[]{t3,t4});              Hits hits=searcher.search(query);       for(int i=0;i<hits.length();i++)       {           System.out.println(hits.doc(i));       }
继续学习奋斗
原创粉丝点击