MST

星途 面试题库

面试题:ElasticSearch 中如何实现简单的可选参数动态配置管理

在 ElasticSearch 中,假设你需要对查询的一些可选参数,如分页参数、排序规则等进行动态配置管理,简述实现思路及涉及到的主要 API 。
18.2万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试
  1. 实现思路
    • 参数获取:从外部配置源(如配置文件、数据库、分布式配置中心,如 Apollo、Spring Cloud Config 等)获取分页参数(如页码 page、每页数量 size)和排序规则(如按某个字段升序或降序,例如 sortField:ascsortField:desc)。
    • 构建查询请求:在代码中根据获取到的参数构建 ElasticSearch 查询请求。对于分页,设置 fromsize 参数;对于排序,使用 SortBuilders 构建排序条件。
    • 执行查询:使用 ElasticSearch 客户端执行构建好的查询,并处理返回结果。
  2. 主要 API
    • 分页
      • Java High - Level REST Client 中,使用 SearchRequestsource 方法设置查询源,在 SearchSourceBuilder 中通过 from(int from) 设置从结果集的第几项开始(从 0 开始),size(int size) 设置返回的文档数量。例如:
SearchRequest searchRequest = new SearchRequest("your_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.from(page * size);
searchSourceBuilder.size(size);
searchRequest.source(searchSourceBuilder);
  • 排序
    • 使用 SortBuilders 构建排序条件。例如,按 price 字段降序排序:
SortBuilder sortBuilder = SortBuilders.fieldSort("price").order(SortOrder.DESC);
searchSourceBuilder.sort(sortBuilder);
  • 配置管理相关
    • 如果使用配置文件,在 Java 中可以使用 Properties 类加载配置文件,如:
Properties properties = new Properties();
try (InputStream inputStream = new FileInputStream("config.properties")) {
    properties.load(inputStream);
    String pageStr = properties.getProperty("page");
    String sizeStr = properties.getProperty("size");
    String sortField = properties.getProperty("sortField");
    String sortOrder = properties.getProperty("sortOrder");
} catch (IOException e) {
    e.printStackTrace();
}
 - 如果使用分布式配置中心,以 Apollo 为例,需要引入 Apollo 相关依赖,在代码中通过 `Config` 获取配置值。例如:
Config config = ConfigService.getAppConfig();
String pageStr = config.getProperty("page", "0");
String sizeStr = config.getProperty("size", "10");
String sortField = config.getProperty("sortField", "default_field");
String sortOrder = config.getProperty("sortOrder", "asc");