IndexPatternService 模糊查询索引 fuzzyQuery分析

好的,根据您提供的文档内容,我提取了 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 对象中。

这样做的目的是为了确保查询结果以统一的格式返回,并且保留分页信息。

posted @ 2024-11-21 00:09  一曲微茫  阅读(6)  评论(0编辑  收藏  举报