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

在Elasticsearch中对嵌套对象进行排序

谯和煦
2023-03-14
问题内容

我正在使用以下映射:

PUT /my_index
{
  "mappings": {
    "blogpost": {
      "properties": {
        "title": {"type": "string"}
        "comments": {
          "type": "nested", 
          "properties": {
            "comment": { "type": "string"  },
            "date":    { "type": "date"    }
          }
        }
      }
    }
  }
}

文件范例:

PUT /my_index/blogpost/1
{
  "title": "Nest eggs",
  "comments": [ 
    {
      "comment": "Great article",
      "date":    "2014-09-01"
    },
    {
      "comment": "More like this please",
      "date":    "2014-10-22"
    },
    {
      "comment": "Visit my website",
      "date":    "2014-07-02"
    },
    {
      "comment": "Awesome",
      "date":    "2014-08-23"
    }
  ]
}

我的问题是如何检索此文档并按“日期”对嵌套对象“注释”进行排序?结果:

PUT /my_index/blogpost/1
{
  "title": "Nest eggs",
  "comments": [ 
    {
      "comment": "Awesome",
      "date":    "2014-07-23"
    },
    {
      "comment": "Visit my website",
      "date":    "2014-08-02"
    },
    {
      "comment": "Great article",
      "date":    "2014-09-01"
    },
    {
      "comment": "More like this please",
      "date":    "2014-10-22"
    }
  ]
}

问题答案:

您需要sort在inner_hits上对进行排序nested objects。这将为您提供所需的输出

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "match_all": {}
      },
      "inner_hits": {
        "sort": {
          "comments.date": {
            "order": "asc"
          }
        },
        "size": 5
      }
    }
  },
  "_source": [
    "title"
  ]
}

我使用的源过滤得到的只有"title"作为comments将被检索里面inner_hit,但你能避免,如果你想

size 是5,因为默认值为3,并且在给定的示例中我们有4个对象。

希望这可以帮助!



 类似资料:
  • 问题内容: 可以说我有以下映射: 然后,我对父文档进行“ _geo_distance”排序,并能够对“ site.point”上的文档进行排序。但是,我还希望嵌套位置在父文档中按“ _geo_distance”排序。 这可能吗?如果是这样,怎么办? 问题答案: 不幸的是,没有(至少现在还没有)。 ElasticSearch中的查询仅标识与该查询匹配的文档以及它们的匹配程度。 要了解嵌套文档的用途,

  • 我用的是Java 8号。我有一份汽车物品清单。我想按特定的顺序对它们进行排序。 每个汽车对象都属于一个模型。我喜欢按型号对汽车对象列表进行排序。排序后的列表应该是按照以下顺序,有车型的轿车SEDAN,然后是宝马,然后是独角兽。 所以当我打印排序后的列表时,它应该是这样的 如何使用自定义比较器在模型枚举上实现这种排序顺序。 如果你能帮忙,我很感激

  • 问题内容: 我有以下ES内容,基本上是网站中包含嵌套商品的产品列表。 如何按站点详细信息的数量排序? tnx! 问题答案: 从问题的示例来看,它看起来像是单个文档,但是单个json文档不可能在同一级别具有相同名称的多个字段。 因此,假设每个字段代表一个不同的顶级文档

  • 问题内容: 我在ElasticSearch中将以下文档编入索引 我想进行部分更新以清空嵌套属性,所以我应该这样做;因此,我尝试发送部分更新: 但是,此操作无济于事,文档保持不变。如何使用部分更新清空文档中的嵌套对象? 问题答案: 我建议像这样进行脚本更新,它将起作用:

  • 问题内容: 我有以下字典。 如何根据排序。因此,结果字典将如下所示。 问题答案: 从订购的项目元组列表构造一个: (假设Python 3,在Python 2中应该做同样的事情。)

  • 问题内容: 是否可以使elasticsearch中的所有嵌套对象自动映射为默认嵌套的类型。而不是对象? 问题答案: 是的,您可以在创建索引时使用以下动态模板来做到这一点: