lucene第三季 Lucene那點事兒 總結篇

2021-09-30 04:07:29 字數 1366 閱讀 5645

前面兩篇文章,簡單嘗試了lucene的一些應用,還是再回頭想想我們的需求吧,我們希望能夠開發乙個**一樣的針對商品的搜尋服務,提供多種條件的組合搜尋,並且對於效能提出了一定的要求。同時我們希望這個小型的搜尋引擎具有一定的通用性,也就是在可以預見的將來,我們可能用它進行店鋪等資訊的搜尋,所以在我們的搜尋**中,不能織入特定的業務邏輯**,而應該進行一定的抽象,抽離出乙個通用的模型。

我們的需求很簡單:

1、單值搜尋

2、單值分頁搜尋

3、組合條件搜尋

4、組合條件分頁搜尋

5、系統對於效能有一定要求,諸如首頁的資訊不能有太久的載入時間

6、搜尋引擎索引的更新需要有一定的精確性,由於資料量的問題不能通過刪除全部再新建的方式來完成

7、自動定時重新整理功能

索引的精確重新整理和自動重新整理在之前的文章中已經講解,這裡不再贅述,可以直接看最下面的**。

關於首頁等這些頁面渲染載入便進行搜尋的情況,我們採用快取來緩和一下搜尋頻率,我們在快取中快取3頁單值搜尋,比如首頁載入的時候並未輸入搜尋條件,我們會預設的針對自己的營銷資料分析來設定預設的搜尋值,執行搜尋。然後快取3頁有效期5分鐘。對於組合查詢,由於組合條件千變萬化,無法通過有效的快取來減少搜尋次數,而且搜尋頻率將遠遠低於預設的單值搜尋,所以不再使用快取。

首先說單值搜尋和組合搜尋的問題,單值搜尋和組合條件搜尋其實都可以通過booleanquery來滿足,只是單值搜尋的條件下只有乙個booleanquery條件而已,但是這裡我們更願意使用queryparse進行分詞,然後自動去搜尋每乙個索引,最後組裝結果,而不是在外部的呼叫**中通過多次的set操作來手動的對應索引的名稱組裝查詢map。這種情況比較適用於類似於**首頁最大的那個搜尋框的情況,輸入乙個字串可以匹配多個字段是否符合,比如標題,摘要資訊,品牌資訊等。

對於單值的分頁查詢,查詢了官方的相關資料,發現沒有乙個類似於資料庫limit操作的直接分頁操作,而是需要手動進行分頁,通過對查詢結果的擷取來獲取需要的區間。我們使用之前開發的分頁器來作為返回值:

對於組合查詢,我們採用booleanquery來組裝查詢query,這裡要注意的問題是,對於組合查詢查詢條件可以分成兩部分:

確定的查詢條件 和 不確定的查詢條件。

所謂的確定查詢條件,即類似於頁面查詢表單中勾選的商品型別,商品品牌等資訊,這類資訊是與固定的字段進行匹配的,這類的查詢條件與其他的條件之間是and關係。

所謂的不確定查詢條件與上述的單值搜尋類似,即輸入的字串與多個字段進行匹配,多個字段之間是or的關係。

為了滿足這個需求,我們設計如下的方法,來使用不同的map儲存不同關係的查詢,有三種即 or關係  and關係 between關係,具體的請看方法簽名

同樣的,對於分頁,我們採用相同的邏輯:

再貼一遍分頁器的**:

快取的**

第三季複習

其實這個複習工作,在每一小節之後複習是最好的,現在搞得真是累,都要從頭看到尾,像是要重新複習一遍,搞得考試拖後很多,真是得不償失啊.所以這個要改變方法,每節之後需要認真複習一遍,把提綱寫下來,之後複習起來就容易很多了.2.列舉與類的靜態成員 首先建立乙個new 乙個enum,建立male和femal...

(第三季)210 事件

事件 事件 event 基於委託,為委託提供了乙個發布 訂閱機制,我們可以說事件是一種具有特殊簽名的委託。什麼是事件?事件 event 是類或物件向其他類或物件通知發生的事情的一種特殊簽名的委託.事件的宣告 public event 委託型別 事件名 通常事件的命名,以名字 event 作為他的名稱...

Lucene學習第三講 lucene索引檔案

索引lucene包下面的demo檔案。設定索引存放位置 directory dir fsdirectory.open paths.get c lucene 標準分詞器 英語分詞器,後面中文需要換中文的分詞器實現類 analyzer analyzer new standardanalyzer 寫索引的...