Lucene6.0學習筆記——經常使用查詢(二)

1.通配符查詢WildcardQuery

Lucene提供兩種通配符,*和?查詢,*表示能匹配多個字符,?僅能匹配一個字符。java

例如:如今有兩個詞,name與nav,對他們進行通配符查詢,na*能夠搜索出兩個詞,而na?就只能搜索出nav一個詞。ui

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

搜索結果:spa

2.範圍查詢TermRangeQuery

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

上面查詢規則能夠看到,花括號「{」代表不包含邊界值,中括號「]」代表包含邊界值。搜索

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表示必須不能知足的條件。lucene

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

BooleanQuery組裝查詢條件,lucene早期版本的是直接new出來的,後面版本作了一些小調整。im

搜索結果:nw

從查詢規則中能夠看到,必須知足條件前面會出現一個加號,必須不能知足條件前面會出現一個減號。

相關文章
相關標籤/搜索