Lucene提供两种通配符,*和?查询,*表示能匹配多个字符,?仅能匹配一个字符。java
例如:如今有两个词,name与nav,对他们进行通配符查询,na*能够搜索出两个词,而na?就只能搜索出nav一个词。ui
Term term=new Term("name","wan*"); //通配符查询,*表示多个字符,?表示单个字符 Query query=new WildcardQuery(term);
搜索结果:spa
Query query=new TermRangeQuery("size", new BytesRef("090"), new BytesRef("500"), false, true);
以上是范围查询的主要代码,查询的是大小范围在90到500之间的文件,能够看到这里把90写成了090,这是由于lucene范围查询是直接比较字符串,依次比较字符ASCLL码,90比500大,若是直接写成90的话,就会查询不出数据。code
后面两个值为false和true的参数,代表是否包含边界值,false代表不包含下限值,后面true代表包含上限值。字符串
搜索结果为:class
上面查询规则能够看到,花括号“{”代表不包含边界值,中括号“]”代表包含边界值。搜索
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表示必须不能知足的条件。lucene
BooleanQuery booleanQuery = new BooleanQuery.Builder().add(clause).add(clause1).add(clause2).build();
BooleanQuery组装查询条件,lucene早期版本的是直接new出来的,后面版本作了一些小调整。im
搜索结果:nw
从查询规则中能够看到,必须知足条件前面会出现一个加号,必须不能知足条件前面会出现一个减号。