Lucene搜尋引擎API的主要類介紹

2021-05-23 12:30:00 字數 2335 閱讀 7334

lucene搜尋的api的類主要有4個 indexsearcher ,query(包括子類),queryparser,hits

一:indexsearcher是搜尋的入口,他的search方法提供了搜尋功能

最普通的termquery

termquery最普通, 用term t=new term("contents","cap"); new termquery(t)就可以構造

termquery把查詢條件視為乙個key, 要求和查詢內容完全匹配,比如field.keyword型別就可以使用termquery

rangequery

rangequery表示乙個範圍的搜尋條件,rangequery query = new rangequery(begin, end, included);

最後乙個boolean值表示是否包含邊界條件本身, 用字元表示為"[begin to end]" 或者""

prefixquery

顧名思義,就是表示以某某開頭的查詢, 字元表示為"something*"

booleanquery

這個是乙個組合的query,你可以把各種query新增進去並標明他們的邏輯關係,新增條件用

public void add(query query, boolean required, boolean prohibited)

方法, 後兩個boolean變數是標示and or not三種關係 字元表示為" and or not" 或 "+ -" ,乙個booleanquery中可以新增多個query, 如果超過setmaxclausecount(int)的值(預設1024個)的話,會丟擲toomanyclauses錯誤.

phrasequery

表示不嚴格語句的查詢,比如"red pig"要匹配"red fat pig","red fat big pig"等,phrasequery所以提供了乙個setslop()引數,在查詢中,lucene會嘗試調整單詞的距離和位置,這個引數表示可以接受調 整次數限制,如果實際的內容可以在這麼多步內調整為完全匹配,那麼就被視為匹配.在預設情況下slop的值是0, 所以預設是不支援非嚴格匹配的, 通過設定slop引數(比如"red pig"匹配"red fat pig"就需要1個slop來把pig後移動1位),我們可以讓lucene來模糊查詢. 值得注意的是,phrasequery不保證前後單詞的次序,在上面的例子中,"pig red"需要2個slop,也就是如果slop如果大於等於2,那麼"pig red"也會被認為是匹配的.

wildcardquery

使用?和*來表示乙個或多個字母比如wil*可以匹配 wild ,wila ,wilxaaaa...,值得注意的是,在wildcard中,只要是匹配上的紀錄,他們的相關度都是一樣的,比如wilxaaaa和wild的對於wil*的相關度就是一樣的.

fuzzyquery

這個query對中文沒有什麼用處,他能模糊匹配英文單詞(前面的都是片語),比如fuzzy和wuzzy他們可以看成類似, 對於英文的各種時態變化和複數形式,這個fuzzyquery還算有用,匹配結果的相關度是不一樣的.字元表示為 "fuzzy~"

三:queryparser使用

對於搜尋引擎, 很多情況下使用者只需要乙個輸入框就要輸入所有的查詢條件(比如google), 這時,queryparser就派上用場了,他的作用就是把各種使用者輸入轉為query或者query組, 他把上面提到的query的字元表示(query.tostring)轉化為實際的query物件,比如"wuzzy~"就會轉換為 fuzzyquery, 不過queryparser用到了analyzer,所以queryparser parse過後的query再tostring未必和原來的一樣.query額外的語法有:

分組:groupping

比如"(a and b) or c",就是括號分組,很容易理解

fieldselectiong

queryparser的查詢條件是對預設的field進行的, 它在queryparser解析的時候編碼指定, 如果使用者需要在查詢條件中選用另外的field, 可以使用如下語法: fieldname:fielda, 如果是多個分組,可以用fieldname:(fielda fieldb fieldc)表示.

*號問題

queryparse預設不允許*號出現在開始部分,這樣做的目的主要是為了防止使用者誤輸入*來頭導致嚴重的效能問題(會把所有記錄讀出)

boosting

通過hello^2.0 可以對hello這個term進行boosting,(我想不到什麼使用者會這樣麼bt)

queryparser是乙個準備好的,立即可以工作的幫助類,不過他還是提供了很多引數供程式設計師調整,首先,我們需要自己構造乙個新的queryparser,然後對他的各種引數來定製化

搜尋引擎 lucene

lucene簡介 搜尋引擎的幾個概念 倒排 倒排索引 inverted index 也稱為反向索引,是搜尋引擎中最常見的資料結構,幾乎所有的搜尋引擎都會使用到倒排索引,它將文件中的詞作為關鍵字,建立詞與文件的對映關係,通過對倒排索引的檢索,可以根據詞快速獲取包含這個詞的文件列表,這對於搜尋引擎來說至...

搜尋引擎 lucene 例子

最近專案中要用到全文搜尋,所以在網上搜了下,找到了lucene 學習下 lucene是乙個很容易上手的搜尋引擎框架,傳統的搜尋引擎,涉及到爬蟲,也就是爬取網頁,然後對網頁進行加工,也就是索引,最後用於搜尋,lucene這個框架可以很方便的幫你做到後面兩個步驟,也就是索引和搜尋!本文嘗試通過乙個例子,...

搜尋引擎lucene入門程式示例

下面是我學習lucene3.4入門時按照lucene in action 第二版改寫的乙個例子。首先要匯入lucene core 3.4.0.jar包。package com.cn import org.apache.lucene.analysis.standard.standardanalyzer...