【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象
一、概述
1、對于一個搜索而言,其核心語句為:
searcher.search(query, 10);此時,其最重要的參數(shù)為一個Qeury對象。構(gòu)造一個Query對象有2種方法:(1)使用Query的子類創(chuàng)建一個對象。
(2)使用QueryParser.parse()創(chuàng)建一個對象。
常用的用于實例化一個對象的Query子類有以下13個:
TermQuery
BooleanQuery
WildcardQuery
PhraseQuery
PrefixQuery
MultiPhraseQuery
FuzzyQuery
RegexpQuery
TermRangeQuery
NumericRangeQuery
ConstantScoreQuery
DisjunctionMaxQuery
MatchAllDocsQuery
2、快速入門
【均以在contents域搜索java關(guān)鍵詞為例】
(1)使用Query的子類,,直接實例化一個對外:
searcher.search( new TermQuery(new Term("contents","java")), 10);以下語句結(jié)構(gòu)更為清晰
Term term= new Term("contents","java"); TermQuery tq = new TermQuery(term); searcher.search(tq , 10); 此外,即為在contents域中搜索包括java的文檔。(2)使用QueryParser的parse()方法,對所傳入的搜索關(guān)鍵詞匯進行解釋,并返回query對象。
QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",new SimpleAnalyzer(Version.LUCENE_48)); Query query = null; try {query = parser.parse("java"); } catch (ParseException e) {e.printStackTrace(); } TopDocs docs = searcher.search(query, 10);以上語句創(chuàng)建一個QueryParser,其默認搜索域為contents,然后將搜索詞匯轉(zhuǎn)化為Query對象。如果指定QueryParser的默認搜索域為全部?如何指定一個Query的搜索域?
二、TermQuery
1、創(chuàng)建方式
上述快速入門中使用的就是TermQuery。
2、適用范圍
(1)直接使用TermQuery,不對搜索詞作任何的分析,包括大小寫都不作轉(zhuǎn)換,而使用QueryParser,則可以根據(jù)Analyzer的類型作分析。
(2)TermQuery適合使用于完全匹配的搜索,如搜索id號,二維碼,姓名等。
三、BooleanQuery
1、創(chuàng)建方式
(1)使用BooleanQuery
多個搜索條件組成BooleanQuey對象,以后補充例子。
(2)使用QueryParser
對于一個QueryParser,若其未指定是何種邏輯操作,則其將默認為Operator.OR。因此,若搜索 java web,則其會認為java OR web。
而對于中文,使用StandartAnalyzer分析器時,會將每個字作為一個詞匯。如搜索“學習”,則搜索“學 OR 習”。
因此,為指定搜索“學習”或者'java web"等,必須顯示指定邏輯操作為Operator.AND。
QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",new StandardAnalyzer(Version.LUCENE_48)); parser.setDefaultOperator(Operator.AND); Query query = parser.parse(term);2、適用范圍
(1)BooleanQuery方式,由于需要將搜索內(nèi)容生成多個Query對象,再進行邏輯組合,因此,只適用于根據(jù)多個搜索條件進行搜索的情形。如:
? ?
在上述頁面選擇多個篩選條件,然后,每個篩選條件生成一個Query對象,再將各個Query對象進行邏輯組合。
(2)QueryParser方式,適用于單一搜索框,使用自然語言進行搜索的情形。如google,百度等搜索框。
四、PhraseQuery
1、簡單說明
在使用雙引號將搜索關(guān)鍵字括起來,則將搜索關(guān)鍵詞作為一個整體的短語進行搜索。如:
前者只有534個返回結(jié)果,后者有200多萬返回結(jié)果。對于前者,將會搜索java 和sunshine之間的距離少于一個特定的slop值的文檔。
總結(jié)
以上是生活随笔為你收集整理的【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Lucene4.8教程之三】搜索
- 下一篇: 【Tika基础教程之一】Tika基础教程