当前位置: 首页 > 面试题库 >

从Elasticsearch的索引中仅获取过滤的嵌套对象

池宸
2023-03-14
问题内容

我有一个包含嵌套对象的文档,如下所示:

{
    "title" : "Title 1",
    "books": [{
        "book_title": "b title 1",
        "year": 2014
    }, {
        "book_title": "b title 2",
        "year": 2015
    }]
}

现在,我需要按书名(不是book_title)和年份(比如2014)来过滤书籍。我需要的输出将是:

{
    "title" : "Title 1",
    "books": [{
        "book_title": "b title 1",
        "year": 2014
    }]
}

当我使用嵌套过滤器时,即使它们不匹配,我也会得到所有嵌套对象。如何仅获取匹配的嵌套对象?


问题答案:

您需要使用以下嵌套inner_hits功能。

{
  "_source": [
    "title"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "title 1"
          }
        },
        {
          "nested": {
            "path": "books",
            "query": {
              "term": {
                "books.year": 2014
              }
            },
            "inner_hits": {}
          }
        }
      ]
    }
  }
}

在输出中,您将确切地获得期望的结果,即title字段和嵌套books数组中的匹配书。



 类似资料:
  • 问题内容: 假设我有: 每个产品都有属性。每个属性都有ID和一个值。我可以按属性筛选产品,但现在我要从MongoDB创建“可能的属性”列表。我想找到一种单独从ElasticSearch生成这样的列表的方法(也许只是向MongoDB查询其他数据)。 我需要的是: 这样的聚合看起来如何?获取所有可用属性(按分组)及其所有可能值(在所有产品中)? 问题答案: 您无法在一个查询中做到这一点,但在两个查询中

  • 问题内容: 我目前正在尝试在NEST中实现“ function_score”查询,其功能仅在过滤器匹配时才适用。 看起来FunctionScoreFunctionsDescriptor似乎还不支持添加过滤器。是否会在不久的将来添加此功能? 这是我想要实现的一个超基本示例: 使用基本分数运行ES查询 浏览功能列表,并向其添加过滤器匹配的第一个分数 我目前正在使用Elasticsearch v1.1.

  • 我有一个映射: 我使用三个条件进行筛选: “日志类型”是“爬虫” “2020-05-23”上的“创建数据” “resp”的大小=0 我试图过滤与查询: {"查询":{"bool":{"必须":[{"术语":{"_logType":{"value":"爬虫"}}},{"范围":{"_createdAt":{"gte":"2020-05-23","lte":"2020-05-23","time_zon

  • 我试图建立一个方面的导航使用elasticsearch为一个电子商务网站。 商店产品可以有多个变体。我想到的文档结构如下所示: 我将变体定义为嵌套类型。这样,以下查询将返回包含匹配筛选器的变体的所有文档: 现在,我真的希望获得与过滤器匹配的变体的id,以便在类别页面上显示该产品的变体。因此,在本例中,我希望返回第二个变量(1_b)的id。我只获取ResultSet中返回的文档的id。有什么方法可以

  • 我有多个嵌套文档doc。嵌套查询工作正常,但它们仍然会返回所有嵌套对象(即整个文档),即使搜索查询只匹配少数嵌套对象。但是,它确实将文档作为一个整体进行过滤。 下面是一个例子: 当在地址中搜索时,理想情况下,我应该只获得带有一个嵌套对象的,但我会获得所有嵌套对象。如何筛选返回的嵌套对象? 示例查询: 该查询的输出是和所有员工,而我只想要。

  • 后台返回的对象如下 传入一个值,如果这个值是city的值 就返回 city province 的索引值 传入是prefecture的值 就返回 prefecture city province的值 [0,1] 或者 [0,2,3]这种