lucene 初探 查詢

2022-02-13 10:12:32 字數 2964 閱讀 2061

lucene初探, 是為了後面solr做準備的. 如果跳過lucene, 直接去看solr, 估計有點懵. 

由於時間的關係, lucene查詢方法也有多個, 所以單獨出來.

一. 精確查詢

/**

* 獲取 查詢物件

* @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.

這裡在新建term的時候, 傳入的是 網域名稱 和 要搜尋的詞.

這裡, 乙個term物件, 只有乙個域, 那如果我想查詢多個域怎麼辦呢.

二. 組合查詢

/**

* 組合查詢 */

@test

public

void queryboolean() throws

exception

這裡的occur列舉值, 有三個, must, should, must_not .

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

四. 數值區間查詢

/**

* 數值區間查詢

* *

@throws

exception */

@test

public

void querynumericrange() throws

exception

這裡的語法輸出就是 :  filesize:[40 to 647]

這是因為我後面兩個都設定為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支援單個或者多個字元的萬用字元查詢,匹配單一字元使用符號 匹配多個字元...