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功能最強大,最爲經常使用。