MST

星途 面试题库

面试题:ElasticSearch返回信息过滤API在复杂嵌套文档中的应用

假设有一个ElasticSearch索引存储了员工信息,每个员工文档包含基本信息(姓名、年龄等)以及一个嵌套的项目列表,每个项目又有项目名称、项目状态等子字段。现在需要获取所有员工的姓名以及他们参与项目中状态为“已完成”的项目名称,使用返回信息过滤API结合查询语句来实现,阐述详细步骤并给出代码示例。
27.8万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试
  1. 步骤阐述
    • 步骤一:构建查询语句
      • 首先,我们需要使用nested查询来深入嵌套的项目列表。因为项目列表是嵌套结构,普通查询无法准确查询嵌套文档中的子字段。
      • nested查询中,指定嵌套路径为项目列表的路径,然后在查询条件中筛选项目状态为“已完成”的文档。
    • 步骤二:使用返回信息过滤API
      • 使用_source字段来指定我们想要返回的字段,即员工姓名和状态为“已完成”的项目名称。
  2. 代码示例(假设索引名为employees
{
    "_source": ["name", "projects.name"],
    "query": {
        "nested": {
            "path": "projects",
            "query": {
                "match": {
                    "projects.status": "已完成"
                }
            }
        }
    }
}

上述代码中:

  • "_source"指定返回员工的name字段以及项目列表中的name字段。
  • "query"部分使用nested查询,path指定为projects,表示项目列表所在路径,内部的match查询筛选出项目状态为“已完成”的项目。