Lucene4.8教程之六 QueryParser與Query子類:如何產生Query對象

來源:互聯網
上載者:User


一、概述

1、對於一個搜尋而言,其核心語句為:

searcher.search(query, 10);
此時,其最重要的參數為一個Qeury對象。構造一個Query對象有2種方法:

(1)使用Query的子類建立一個對象。

(2)使用QueryParser.parse()建立一個對象。

常用的用於執行個體化一個對象的Query子類有以下13個:
TermQuery
BooleanQuery
WildcardQuery
PhraseQuery
PrefixQuery
MultiPhraseQuery
FuzzyQuery
RegexpQuery
TermRangeQuery
NumericRangeQuery
ConstantScoreQuery
DisjunctionMaxQuery
MatchAllDocsQuery

2、快速入門

【均以在contents域搜尋java關鍵詞為例】

(1)使用Query的子類,,直接執行個體化一個對外:

searcher.search( new TermQuery(new Term("contents","java")), 10);

以下語句結構更為清晰

Term term= new Term("contents","java");TermQuery tq = new TermQuery(term);searcher.search(tq , 10);

此外,即為在contents域中搜尋包括java的文檔。

(2)使用QueryParser的parse()方法,對所傳入的搜尋關鍵詞彙進行解釋,並返回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);
以上語句建立一個QueryParser,其預設搜尋域為contents,然後將搜尋字詞匯轉化為Query對象。

如果指定QueryParser的預設搜尋域為全部。如何指定一個Query的搜尋域。


二、TermQuery

1、建立方式

上述快速入門中使用的就是TermQuery。

2、適用範圍

(1)直接使用TermQuery,不對搜尋字詞作任何的分析,包括大小寫都不作轉換,而使用QueryParser,則可以根據Analyzer的類型作分析。

(2)TermQuery適合使用於完全符合的搜尋,如搜尋id號,二維碼,姓名等。


三、BooleanQuery

1、建立方式

(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方式,由於需要將搜尋內容產生多個Query對象,再進行邏輯組合,因此,只適用於根據多個搜尋條件進行搜尋的情形。如:

   

在上述頁面選擇多個篩選條件,然後,每個篩選條件產生一個Query對象,再將各個Query對象進行邏輯組合。

(2)QueryParser方式,適用於單一搜尋方塊,使用自然語言進行搜尋的情形。如google,百度等搜尋方塊。


四、PhraseQuery

1、簡單說明

在使用雙引號將搜尋索引鍵括起來,則將搜尋關鍵詞作為一個整體的短語進行搜尋。如:




前者只有534個返回結果,後者有200多萬返回結果。對於前者,將會搜尋java 和sunshine之間的距離少於一個特定的slop值的文檔。







聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.