lucene初探, 是為了後面solr做準備的. 如果跳過lucene, 直接去看solr, 估計有點懵.
由於時間的關係, lucene查詢方法也有多個, 所以單獨出來.
一. 精確查詢
/**在查詢的時候, 新建乙個term物件, 進去精確匹配. 前一篇提到過, 經過分詞器分下來的每乙個詞或者一段話, 就是乙個term.* 獲取 查詢物件
* @return
* @throws
exception
*/private indexsearcher getsearcher() throws
exception
/*** 輸出資訊到控制台
* @param
indexsearcher
* @param
query
* @throws
exception
*/public
void sout(indexsearcher indexsearcher, query query) throws
exception
}/*** 精確查詢**
@throws
exception
*/@test
public
void searchindex() throws
exception
這裡在新建term的時候, 傳入的是 網域名稱 和 要搜尋的詞.
這裡, 乙個term物件, 只有乙個域, 那如果我想查詢多個域怎麼辦呢.
二. 組合查詢
/**這裡的occur列舉值, 有三個, must, should, must_not .* 組合查詢 */
@test
public
void queryboolean() throws
exception
must : 相當於sql裡面的 and 連線
should : 相當於 or , 可有可沒有
must_not : 相當於 != , 不包含
這裡如果列印query, 會顯示: +filename:生活 filecontent:生活
這是lucene的一種語法, lucene可以根據語法來查詢資料. 後面會提到. 如果是must_not , 則使用減號.
如: 將上面的query2使用 must_not 連線, 則顯示成: +filename:生活 -filecontent:生活
三 . 查詢所有
一般查詢資料庫的時候, 都會提供乙個 getall 方法, 用於查詢滿足條件的所有資料, 當不傳條件時, 就查詢所有
lucene也提供了乙個查詢所有的方法 : matchalldocsquery
/**四. 數值區間查詢* 查詢所有
* *
@throws
exception */
@test
public
void queryall() throws
exception
/**這裡的語法輸出就是 : filesize:[40 to 647]* 數值區間查詢
* *
@throws
exception */
@test
public
void querynumericrange() throws
exception
這是因為我後面兩個都設定為true, 表示包含關係. 如果都設定為false, 就是
五. 分詞器解析查詢
如前面提到的, 我輸入一句話查詢, 結果展示的結果卻並不是按照我輸入的全匹配結果.
那是因為在查詢之前, 對輸入的資訊, 進行了分詞器解析, 然後根據解析結果, 再去查詢資料.
/***:* 表示查詢所有. 不管是哪個域.* 條件解析物件查詢
* *
@throws
exception */
@test
public
void queryparser() throws
exception
filename:這花好漂亮 : 表示在filename域中, 將 "這花好漂亮" 分詞解析後, 進行查詢
花 : 在filename域中, 查詢花. 因為在queryparse建立的時候, 指定了域為 filename
即使我在queryparser裡面指定了要查詢的域, 但是在parse的時候, 我可以重新指定域.
這裡需要注意的是, 在上面數值區間查詢的時候, 如果我直接寫語法進去查詢, 是查不出來的. 因為數值型別變了. 通過語法輸進去, 變成字串型別了.
從結果中可以看到, 我輸入 這花好漂亮, 查出來的卻是 軍中綠花. 這就是分詞的作用了.
六. 多域分詞查詢
/**多域分詞查詢, 沒啥好說的了.* 條件解析物件查詢
* *
@throws
exception */
@test
public
void querymultiparser() throws
exception ;
multifieldqueryparser queryparser = new multifieldqueryparser(fields, new
ikanalyzer());
query query = queryparser.parse("生活大**");
sout(searcher, query);
searcher.getindexreader().close();
}
Lucene全文檢索初探
1 全文檢索是什麼 先建立索引,再對索引進行搜尋的過程。2 為什麼需要全文檢索 在網頁搜尋時,如果沒有全文檢索,每一次檢索資料都會對資料庫進行查詢,當資料庫的資料量非常大時,搜尋起來非常耗時以及耗費資源,所以我們可以先將資料庫的資料採集出來,提前對這些資料進行整理,建立索引,將這些索引檔案儲存到伺服...
Lucene分頁查詢
個人認為最好每一次分頁導航都執行一次新的 查詢。color red lucene舊版本中常用方法 color hits中儲存的並不是真正的document,因此可以通過hits.doc index 的方式取出在一定範圍內的document。在獲 得hits後可以用類似下面的方法進行分頁處理 priv...
Lucene查詢語法
一 模糊查詢 term modifiers lucene支援在term中使用萬用字元來支援模糊查詢。wildcard searches 類 org.apache.lucene.search.wildcardquery lucene支援單個或者多個字元的萬用字元查詢,匹配單一字元使用符號 匹配多個字元...