lucene搜索方式(query類型)

Lucene有多種搜索方式,能夠根據須要選擇不一樣的方式。正則表達式

一、詞條搜索(單個關鍵字查找)spa

     主要對象是TermQuery對象

     調用方式以下:ip

Term term=new Term(字段名,搜索關鍵字);
Query query
=new TermQuery(term);
Hits hits
=searcher.search(query);
it

 

二、組合搜索(容許多個關鍵字組合搜索)搜索

     主要對象是BooleanQuery方法

     調用方式以下:im

 


Term term1=new Term(字段名,搜索關鍵字);
TermQuery query1
=new TermQuery(term1);

Term term2
=new Term(字段名,搜索關鍵字);
TermQuery query2
=new TermQuery(term2);

BooleanQuery booleanquery
=new BooleanQuery();
booleanquery.add(query1,參數)
booleanquery.add(query2,參數)

Hits hits
=searcher.search(booleanquery);
top

此方法中的核心在BooleanQuery的add方法上,其第二個參數有三個可選值,對應着邏輯上的與或非關係img

參數以下:

BooleanClause.Occur.MUST                必須包含,相似於邏輯運算的與

BooleanClause.Occur.MUST _NOT       必須不包含,相似於邏輯運算的非

BooleanClause.Occur.SHOULD           能夠包含,相似於邏輯運算的或

這三者組合,妙用無窮。

 

三、範圍搜索(容許搜索指定範圍內的關鍵字結果)

     主要對象是RangeQuery

     調用方式以下: 

Term term1=new Term(字段名,起始值);

Term term2
=new Term(字段名,終止值);

RangeQuery rangequery
=new RangeQuery(term1,term2,參數);

Hits hits
=searcher.search(rangequery);

此方法中的參數是Boolean類型的,表示是否包含邊界 。

true 包含邊界

false不包含邊界


 

四、前綴搜索(搜索起始位置符合要求的結果)

     主要對象是PrefixQuery

     調用方式以下:

Term term=new Term(字段名,搜索關鍵字);
PrefixQuery prefixquery
=new PrefixQuery (term);
Hits hits
=searcher.search(prefixquery);

 

五、短語搜索(根據零碎的短語組合成新的詞組進行搜索)

     主要對象是PhraseQuery

     調用方式以下:

Term term1=new Term(字段名,搜索關鍵字);
Term term2
=new Term(字段名,搜索關鍵字);

PhraseQuery phrasequery
=new PhraseQuery();
phrasequery.setSlop(參數);
phrasequery.add(term1);
phrasequery.add(term2);
Hits hits
=searcher.search(phrasequery);

其中setSlop的參數是設置兩個關鍵字之間容許間隔的最大值。

六、多短語搜索(先指定一個前綴關鍵字,而後講其餘的關鍵字加在此關鍵字以後,組成詞語進行搜索)

     主要對象是:MultiPhraseQuery

     調用方式以下:

Term term=new Term(字段名,前置關鍵字);
Term term1
=new Term(字段名,搜索關鍵字);
Term term2
=new Term(字段名,搜索關鍵字);


MultiPhraseQuery multiphrasequery
=new MultiPhraseQuery();

multiphrasequery.add(term);
multiphrasequery.add(
new Term[]{term1,term2});

Hits hits
=searcher.search(multiphrasequery);

 

七、模糊搜索(顧名思義)

     主要對象是:FuzzyQuery

     調用方式以下:

 

Term term=new Term(字段名,搜索關鍵字);
FuzzyQuery fuzzyquery
=new FuzzyQuery (term,參數);
Hits hits
=searcher.search(fuzzyquery);

此中的參數是表示模糊度,是小於1的浮點小數,好比0.5f

八、通配符搜索(顧名思義)

     主要對象是:WildcardQuery

     調用方式以下: 


Term term=new Term(字段名,搜索關鍵字+通配符);
WildcardQuery wildcardquery
=new WildcardQuery (term);
Hits hits
=searcher.search(wildcardquery);

 

其中的通配符分兩種,即*和?

* 表示任意多的自負

?表示任意一個字符

 

九、正則表達式搜索(顧名思義)

     主要對象是:RegexQuery

     調用方式以下: 

 

Lucene 搜索種類不少。這裏就介紹幾個最經常使用的。其中TermQuery\BooleanQuery\RegexQuery功能最強大,最爲經常使用。

相關文章
相關標籤/搜索