檢索前,需要對檢索字符串進行分析,這是由QueryParser來完成的。為了保證查詢的正確性,最好用創建索引文件時同樣的分析器。QueryParser解析字符串時,可以指定查詢域,實際可以在字符串中指定一個或多個域。例如:“Info:電視臺 AND ID:3329”,“Info:電視臺”,“電視臺”,假如不指定默認域,就會在默認域查詢。
QueryParser調用靜態方法Parse后會返回Query的實例,原子查詢。例如:“Info:電視臺 AND ID:3329”會返回BooleanQuery,“Info:電視臺”或“電視臺”會返回PhraseQuery,“臺”會返回TermQuery。
Lucene內建Query對象:
TermQuery:詞條查詢。通過對某個詞條的指定,實現檢索索引中存在該詞條的所有文檔。
BooleanQuery:布爾查詢。Lucene中包含邏輯關系:“與”,“或”,“非”的復雜查詢,最終都會表示成BooleanQuery。布爾查詢就是一個由多個子句和子句之間組成的布爾邏輯所組成的查詢。
RangeQuery:范圍查詢。這種范圍可以是日期,時間,數字,大小等等。
PrefixQuery:前綴查詢。
PhraseQuery:短語查詢。默認為完全匹配,但可以指定坡度(Slop,默認為0)改變范圍。比如Slop=1,檢索短語為“電臺”,那么在“電臺”中間有一個字的也可以被查找出來,比如“電視臺”。
MultiPhraseQuery:多短語查詢。
FuzzyQuery:模糊查詢。模糊查詢使用的匹配算法是levenshitein算法。此算法在比較兩個字符串時,將動作分為3種:加一個字母(Insert),刪一個字母(Delete),改變一個字母(Substitute)。
WildcardQuery:通配符查詢。“*”號表示0到多個字符,“?”表示單個字符。
SpanQuery:跨度查詢。此類為抽象類。
SpanTermQuery:檢索效果完全同TermQuery,但內部會記錄一些位置信息,供SpanQuery的其它API使用,是其它屬于SpanQuery的Query的基礎。
SpanFirstQuery:查找方式為從Field的內容起始位置開始,在一個固定的寬度內查找所指定的詞條。
SpanNearQuery:功能類似PharaseQuery。SpanNearQuery查找所匹配的不一定是短語,還有可能是另一個SpanQuery的查詢結果作為整體考慮,進行嵌套查詢。
SpanOrQuery:把所有SpanQuery查詢結果綜合起來,作為檢索結果。
SpanNotQuery:從第一個SpanQuery查詢結果中,去掉第二個SpanQuery查詢結果,作為檢索結果。
BooleanClause用于表示布爾查詢子句關系的類,包括:BooleanClause.Occur.MUST,BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD。有以下6種組合:
1.MUST和MUST:取得連個查詢子句的交集。
2.MUST和MUST_NOT:表示查詢結果中不能包含MUST_NOT所對應得查詢子句的檢索結果。
3.MUST_NOT和MUST_NOT:無意義,檢索無結果。
4.SHOULD與MUST、SHOULD與MUST_NOT:SHOULD與MUST連用時,無意義,結果為MUST子句的檢索結果。與MUST_NOT連用時,功能同MUST。
5.SHOULD與SHOULD:表示“或”關系,最終檢索結果為所有檢索子句的并集。
posted on 2007-06-20 16:50
Terry Liang 閱讀(1806)
評論(1) 編輯 收藏 所屬分類:
Lucene 2.1研究