apache lucene7.0几种常用的查询条件构造方式

来源:互联网 发布:db2和sqlserver 编辑:程序博客网 时间:2024/06/07 15:23
官方文档:https://lucene.apache.org/core/7_1_0/core/org/apache/lucene/search/package-summary.html#search

1.通过QueryParser构造查询单条件条件
QueryParser queryParser = new QueryParser("courseName", analyzer);Query query = queryParser.parse("语文的3年级");




2.通过构造单条件TermQuery
Query query = new TermQuery(new Term("courseName", "小学"));




3.通过构造多条件查询MultiFieldQueryParser
String[] queries= {"古诗","古诗二首"};String[] fields = { "courseName", "title" }; Query query = MultiFieldQueryParser.parse(queries, fields, analyzer);






4.BooleanQuery 构建多条件查询
Query query1 = new TermQuery(new Term("title", "语文"));Query query2 = new TermQuery(new Term("courseName", "3年级"));BooleanClause bc1 = new BooleanClause(query1, BooleanClause.Occur.MUST);BooleanClause bc2 = new BooleanClause(query2, BooleanClause.Occur.MUST_NOT);Query query = new BooleanQuery.Builder().add(bc1).add(bc2).build();


5.PhraseQuery 个人感觉主要对英语(类似英语单词之间有空格分开的语言)  有作用,对于中文可能作用不大

 PhraseQuery.Builder builder = new PhraseQuery.Builder();//表示组成一个 "hello XXXX word" 的短语区匹配 builder.add(new Term("courseName", "hello"),0); builder.add(new Term("courseName", "word"),2); //假如有一个document "hellow,I zhengzhen  word." //表示hellow向右(也可能向右)移动1次以后 "hellow zhengzhen word" 刚好匹配"hello XXXX word" builder.setSlop(1); Query query = builder.build();

6.MultiPhraseQuery  是PhraseQuery 的子类,作用相似

 MultiPhraseQuery.Builder b=new MultiPhraseQuery.Builder(); b.add(new Term("title","Unit")).add(new Term("title","1")); b.setSlop(2); Query query =b.build();


7.通配符查询WildcardQuery

//使用通配符查询,*代表0个或多个字母,?代表0个或1个字母。Query query=new WildcardQuery(new Term("title","Unit*"));


8.PointRangeQuery数字范围查询


1.MUST和MUST:取得连个查询子句的交集。 
2.MUST和MUST_NOT:表示查询结果中不能包含MUST_NOT所对应得查询子句的检索结果。 
3.SHOULD与MUST_NOT:连用时,功能同MUST和MUST_NOT。
4.SHOULD与MUST连用时,结果为MUST子句的检索结果,但是SHOULD可影响排序。
5.SHOULD与SHOULD:表示“或”关系,最终检索结果为所有检索子句的并集。
6.MUST_NOT和MUST_NOT:无意义,检索无结果。
原创粉丝点击