Lucene6.0学习笔记——常用查询(二)

拈花ヽ惹草 提交于 2020-04-17 03:44:22

【推荐阅读】微服务还能火多久?>>>

1.通配符查询WildcardQuery

Lucene提供两种通配符,*和?查询,*表示能匹配多个字符,?仅能匹配一个字符。

例如:现在有两个词,name与nav,对他们进行通配符查询,na*可以搜索出两个词,而na?就只能搜索出nav一个词。

Term term=new Term("name","wan*");
//通配符查询,*表示多个字符,?表示单个字符
Query query=new WildcardQuery(term);

搜索结果:

2.范围查询TermRangeQuery

Query query=new TermRangeQuery("size", new BytesRef("090"), new BytesRef("500"), false, true);

以上是范围查询的主要代码,查询的是大小范围在90到500之间的文件,可以看到这里把90写成了090,这是因为lucene范围查询是直接比较字符串,依次比较字符ASCLL码,90比500大,如果直接写成90的话,就会查询不出数据。

后面两个值为false和true的参数,表明是否包含边界值,false表明不包含下限值,后面true表明包含上限值。

搜索结果为:

上面查询规则可以看到,花括号“{”表明不包含边界值,中括号“]”表明包含边界值。

3.组合查询BooleanQuery

Term term=new Term("name","wan*");
Query query=new WildcardQuery(term);

Term term1=new Term("content","nonq");
Query query1=new TermQuery(term1);

Term term2=new Term("content","nonw");
Query query2=new TermQuery(term2);

BooleanClause clause=new BooleanClause(query, Occur.MUST);
BooleanClause clause1=new BooleanClause(query1, Occur.SHOULD);
BooleanClause clause2=new BooleanClause(query2, Occur.MUST_NOT);

BooleanQuery booleanQuery = new BooleanQuery.Builder().add(clause).add(clause1).add(clause2).build();

BooleanClause:用于包装条件,Occur.MUST表示该条件为必须满足条件,Occur.SHOULD表示可有可无的条件,Occur.MUST_NOT表示必须不能满足的条件。

BooleanQuery booleanQuery = new BooleanQuery.Builder().add(clause).add(clause1).add(clause2).build();

BooleanQuery组装查询条件,lucene早期版本的是直接new出来的,后面版本做了一些小调整。

搜索结果:

从查询规则中可以看到,必须满足条件前面会出现一个加号,必须不能满足条件前面会出现一个减号。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!