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
列表。
方法步骤
-
初始化查询参数:
Map<String, Object> map = new HashMap<>(); map.put("indexPatternName", request.getIndexPatternName()); map.put("systemIdList", request.getSystemIdList()); map.put("applicationName", request.getApplicationName());
- 创建一个
HashMap
对象来存储查询参数。 - 将请求中的
indexPatternName
、systemIdList
和applicationName
添加到map
中。
- 创建一个
-
创建响应对象:
FuzzyQueryIndexPatternResponse response = new FuzzyQueryIndexPatternResponse();
-
设置默认分页参数:
if (request.getPageIndex() <= 0) { request.setPageIndex(1); } if (request.getLimit() <= 0) { request.setLimit(10); }
- 如果请求中的
pageIndex
小于等于 0,则默认设置为 1。 - 如果请求中的
limit
小于等于 0,则默认设置为 10。
- 如果请求中的
-
计算偏移量:
int offset = (request.getPageIndex() - 1) * request.getLimit();
- 计算查询的起始偏移量,用于分页查询。
-
执行模糊查询:
Page<IndexPattern> indexPatternPage = PageHelper.offsetPage(offset, request.getLimit(), true).doSelectPage(() -> indexPatternMapper.fuzzySearch(map));
- 使用
PageHelper
进行分页查询。 - 调用
indexPatternMapper.fuzzySearch(map)
方法执行模糊查询,并返回分页结果。
- 使用
-
转换查询结果:
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
中。
- 创建一个新的
-
设置响应结果:
response.setPageInfo(indexPatternItemPage.toPageInfo()); RespUtils.setSuccess(response);
- 将分页信息设置到响应对象中。
- 使用
RespUtils.setSuccess
方法设置响应的成功状态。
-
返回响应对象:
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
包含查询参数。
运行逻辑
-
分页设置:
PageHelper.offsetPage(offset, request.getLimit(), true)
:设置分页参数,包括起始偏移量offset
、每页记录数request.getLimit()
和是否开启分页统计true
。
-
执行查询:
doSelectPage(() -> indexPatternMapper.fuzzySearch(map))
:执行实际的查询方法indexPatternMapper.fuzzySearch(map)
,并将结果封装在一个Page
对象中。indexPatternMapper.fuzzySearch(map)
:这是一个 Mapper 方法,用于执行模糊查询。map
包含查询条件,如indexPatternName
、systemIdList
和applicationName
。
-
返回结果:
- 查询结果被封装在
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
对象的方法。
运行逻辑
-
创建新的
Page
对象:Page<IndexPatternItem> indexPatternItemPage = new Page<>();
:创建一个新的Page
对象,用于存储转换后的IndexPatternItem
列表。
-
复制分页信息:
BeanUtils.copyProperties(indexPatternPage, indexPatternItemPage);
:使用BeanUtils.copyProperties
方法将indexPatternPage
的分页信息(如总记录数、当前页码等)复制到indexPatternItemPage
。
-
遍历查询结果并转换:
for (IndexPattern indexPattern : indexPatternPage.getResult()) {
:遍历indexPatternPage
中的查询结果。indexPatternItemPage.add(getIndexPatternItem(indexPattern));
:将每个IndexPattern
对象转换为IndexPatternItem
对象,并添加到indexPatternItemPage
中。
-
转换方法:
getIndexPatternItem(indexPattern)
:这是一个方法,用于将IndexPattern
对象转换为IndexPatternItem
对象。具体的转换逻辑取决于getIndexPatternItem
方法的实现。
总结
这段代码的主要功能是执行分页模糊查询,并将查询结果转换为 IndexPatternItem
列表。具体步骤如下:
- 设置分页参数并执行查询:使用
PageHelper
设置分页参数,并调用indexPatternMapper.fuzzySearch(map)
方法执行模糊查询。 - 创建新的
Page
对象:创建一个新的Page<IndexPatternItem>
对象,用于存储转换后的结果。 - 复制分页信息:将查询结果的分页信息复制到新的
Page
对象中。 - 遍历查询结果并转换:遍历查询结果,将每个
IndexPattern
对象转换为IndexPatternItem
对象,并添加到新的Page
对象中。
这样做的目的是为了确保查询结果以统一的格式返回,并且保留分页信息。