IndexPatternService 模糊查詢索引 fuzzyQuery分析

一曲微茫發表於2024-11-21

好的,根據您提供的文件內容,我提取了 fuzzyQuery 方法,並對其進行詳細分析。以下是提取的 fuzzyQuery 方法及其相關部分:

提取的 fuzzyQuery 方法

@Override
public FuzzyQueryIndexPatternResponse fuzzyQuery(FuzzyQueryIndexPatternRequest request) {
    Map<String, Object> map = new HashMap<>();
    map.put("indexPatternName", request.getIndexPatternName());
    map.put("systemIdList", request.getSystemIdList());
    map.put("applicationName", request.getApplicationName());
    
    FuzzyQueryIndexPatternResponse response = new FuzzyQueryIndexPatternResponse();
    
    // 設定預設分頁引數
    if (request.getPageIndex() <= 0) {
        request.setPageIndex(1);
    }
    if (request.getLimit() <= 0) {
        request.setLimit(10);
    }
    
    int offset = (request.getPageIndex() - 1) * request.getLimit();
    
    // 執行模糊查詢
    Page<IndexPattern> indexPatternPage = PageHelper.offsetPage(offset, request.getLimit(), true).doSelectPage(() -> indexPatternMapper.fuzzySearch(map));
    
    // 將查詢結果轉換為 IndexPatternItem 列表
    Page<IndexPatternItem> indexPatternItemPage = new Page<>();
    BeanUtils.copyProperties(indexPatternPage, indexPatternItemPage);
    for (IndexPattern indexPattern : indexPatternPage.getResult()) {
        indexPatternItemPage.add(getIndexPatternItem(indexPattern));
    }
    
    // 設定響應結果
    response.setPageInfo(indexPatternItemPage.toPageInfo());
    RespUtils.setSuccess(response);
    
    return response;
}

方法分析

輸入引數

  • FuzzyQueryIndexPatternRequest request:包含模糊查詢所需的引數,如 indexPatternName(索引模式名稱)、systemIdList(系統ID列表)、applicationName(應用名稱)、pageIndex(當前頁碼)和 limit(每頁顯示的記錄數)。

輸出引數

  • FuzzyQueryIndexPatternResponse response:包含查詢結果的響應物件,包括分頁資訊和查詢到的 IndexPatternItem 列表。

方法步驟

  1. 初始化查詢引數

    Map<String, Object> map = new HashMap<>();
    map.put("indexPatternName", request.getIndexPatternName());
    map.put("systemIdList", request.getSystemIdList());
    map.put("applicationName", request.getApplicationName());
    
    • 建立一個 HashMap 物件來儲存查詢引數。
    • 將請求中的 indexPatternNamesystemIdListapplicationName 新增到 map 中。
  2. 建立響應物件

    FuzzyQueryIndexPatternResponse response = new FuzzyQueryIndexPatternResponse();
    
  3. 設定預設分頁引數

    if (request.getPageIndex() <= 0) {
        request.setPageIndex(1);
    }
    if (request.getLimit() <= 0) {
        request.setLimit(10);
    }
    
    • 如果請求中的 pageIndex 小於等於 0,則預設設定為 1。
    • 如果請求中的 limit 小於等於 0,則預設設定為 10。
  4. 計算偏移量

    int offset = (request.getPageIndex() - 1) * request.getLimit();
    
    • 計算查詢的起始偏移量,用於分頁查詢。
  5. 執行模糊查詢

    Page<IndexPattern> indexPatternPage = PageHelper.offsetPage(offset, request.getLimit(), true).doSelectPage(() -> indexPatternMapper.fuzzySearch(map));
    
    • 使用 PageHelper 進行分頁查詢。
    • 呼叫 indexPatternMapper.fuzzySearch(map) 方法執行模糊查詢,並返回分頁結果。
  6. 轉換查詢結果

    Page<IndexPatternItem> indexPatternItemPage = new Page<>();
    BeanUtils.copyProperties(indexPatternPage, indexPatternItemPage);
    for (IndexPattern indexPattern : indexPatternPage.getResult()) {
        indexPatternItemPage.add(getIndexPatternItem(indexPattern));
    }
    
    • 建立一個新的 Page<IndexPatternItem> 物件。
    • 使用 BeanUtils.copyProperties 方法將 indexPatternPage 的屬性複製到 indexPatternItemPage
    • 遍歷查詢結果,將每個 IndexPattern 物件轉換為 IndexPatternItem 物件,並新增到 indexPatternItemPage 中。
  7. 設定響應結果

    response.setPageInfo(indexPatternItemPage.toPageInfo());
    RespUtils.setSuccess(response);
    
    • 將分頁資訊設定到響應物件中。
    • 使用 RespUtils.setSuccess 方法設定響應的成功狀態。
  8. 返回響應物件

    return response;
    

總結

fuzzyQuery 方法透過接收模糊查詢請求,執行分頁模糊查詢,並將查詢結果轉換為 IndexPatternItem 列表,最終返回包含分頁資訊和查詢結果的響應物件。這種方法能夠有效地處理模糊查詢需求,並支援分頁展示結果。
好的,讓我們詳細分析 fuzzyQuery 方法中的關鍵部分,特別是這一段程式碼:

Page<IndexPattern> indexPatternPage = PageHelper.offsetPage(offset, request.getLimit(), true).doSelectPage(() -> indexPatternMapper.fuzzySearch(map));

// 將查詢結果轉換為 IndexPatternItem 列表
Page<IndexPatternItem> indexPatternItemPage = new Page<>();
BeanUtils.copyProperties(indexPatternPage, indexPatternItemPage);
for (IndexPattern indexPattern : indexPatternPage.getResult()) {
    indexPatternItemPage.add(getIndexPatternItem(indexPattern));
}

詳細分析

1. 執行分頁模糊查詢

Page<IndexPattern> indexPatternPage = PageHelper.offsetPage(offset, request.getLimit(), true).doSelectPage(() -> indexPatternMapper.fuzzySearch(map));
引數解釋
  • offset:查詢的起始偏移量,表示從第幾條記錄開始查詢。
  • request.getLimit():每頁顯示的記錄數。
  • true:是否開啟分頁統計,通常用於獲取總記錄數。
  • () -> indexPatternMapper.fuzzySearch(map):這是一個 lambda 表示式,表示要執行的查詢方法。indexPatternMapper.fuzzySearch(map) 是實際的查詢方法,傳入的 map 包含查詢引數。
執行邏輯
  1. 分頁設定

    • PageHelper.offsetPage(offset, request.getLimit(), true):設定分頁引數,包括起始偏移量 offset、每頁記錄數 request.getLimit() 和是否開啟分頁統計 true
  2. 執行查詢

    • doSelectPage(() -> indexPatternMapper.fuzzySearch(map)):執行實際的查詢方法 indexPatternMapper.fuzzySearch(map),並將結果封裝在一個 Page 物件中。
    • indexPatternMapper.fuzzySearch(map):這是一個 Mapper 方法,用於執行模糊查詢。map 包含查詢條件,如 indexPatternNamesystemIdListapplicationName
  3. 返回結果

    • 查詢結果被封裝在 Page<IndexPattern> 物件中,該物件不僅包含查詢結果,還包含分頁資訊,如總記錄數、當前頁碼等。

2. 將查詢結果轉換為 IndexPatternItem 列表

// 將查詢結果轉換為 IndexPatternItem 列表
Page<IndexPatternItem> indexPatternItemPage = new Page<>();
BeanUtils.copyProperties(indexPatternPage, indexPatternItemPage);
for (IndexPattern indexPattern : indexPatternPage.getResult()) {
    indexPatternItemPage.add(getIndexPatternItem(indexPattern));
}
引數解釋
  • indexPatternPage:包含查詢結果的 Page<IndexPattern> 物件。
  • indexPatternItemPage:新的 Page<IndexPatternItem> 物件,用於儲存轉換後的結果。
  • getIndexPatternItem(indexPattern):將 IndexPattern 物件轉換為 IndexPatternItem 物件的方法。
執行邏輯
  1. 建立新的 Page 物件

    • Page<IndexPatternItem> indexPatternItemPage = new Page<>();:建立一個新的 Page 物件,用於儲存轉換後的 IndexPatternItem 列表。
  2. 複製分頁資訊

    • BeanUtils.copyProperties(indexPatternPage, indexPatternItemPage);:使用 BeanUtils.copyProperties 方法將 indexPatternPage 的分頁資訊(如總記錄數、當前頁碼等)複製到 indexPatternItemPage
  3. 遍歷查詢結果並轉換

    • for (IndexPattern indexPattern : indexPatternPage.getResult()) {:遍歷 indexPatternPage 中的查詢結果。
    • indexPatternItemPage.add(getIndexPatternItem(indexPattern));:將每個 IndexPattern 物件轉換為 IndexPatternItem 物件,並新增到 indexPatternItemPage 中。
  4. 轉換方法

    • getIndexPatternItem(indexPattern):這是一個方法,用於將 IndexPattern 物件轉換為 IndexPatternItem 物件。具體的轉換邏輯取決於 getIndexPatternItem 方法的實現。

總結

這段程式碼的主要功能是執行分頁模糊查詢,並將查詢結果轉換為 IndexPatternItem 列表。具體步驟如下:

  1. 設定分頁引數並執行查詢:使用 PageHelper 設定分頁引數,並呼叫 indexPatternMapper.fuzzySearch(map) 方法執行模糊查詢。
  2. 建立新的 Page 物件:建立一個新的 Page<IndexPatternItem> 物件,用於儲存轉換後的結果。
  3. 複製分頁資訊:將查詢結果的分頁資訊複製到新的 Page 物件中。
  4. 遍歷查詢結果並轉換:遍歷查詢結果,將每個 IndexPattern 物件轉換為 IndexPatternItem 物件,並新增到新的 Page 物件中。

這樣做的目的是為了確保查詢結果以統一的格式返回,並且保留分頁資訊。

相關文章