我在ElasticSearch中具有以下结构的文档:
"_source": {
"last_updated": "2017-10-25T18:33:51.434706",
"country": "Italia",
"price": [
"€ 139",
"€ 125",
"€ 120",
"€ 108"
],
"max_occupancy": [
2,
2,
1,
1
],
"type": [
"Type 1",
"Type 1 - (Tag)",
"Type 2",
"Type 2 (Tag)",
],
"availability": [
10,
10,
10,
10
],
"size": [
"26 m²",
"35 m²",
"47 m²",
"31 m²"
]
}
}
基本上,详细信息记录分为5个数组,同一记录的字段在5个数组中具有相同的索引位置。在示例数据中可以看到,有5个数组(价格,最大占用率,类型,可用性,大小),其中包含与同一元素相关的值。我要提取具有max_occupancy字段大于或等于2的元素(如果没有2的记录,则抢3;如果没有3的记录,则抢4,…),价格较低,在这种情况下为记录并将结果放入新的JSON对象中,如下所示:
{
"last_updated": "2017-10-25T18:33:51.434706",
"country": "Italia",
"price: ": "€ 125",
"max_occupancy": "2",
"type": "Type 1 - (Tag)",
"availability": 10,
"size": "35 m²"
}
基本上,结果结构应显示提取的记录(在这种情况下为所有数组的第二个索引),并向其中添加常规信息(字段:“ last_updated”,“国家/地区”)。
是否可以从elasticsearch中提取这样的结果?我需要执行哪种查询?
有人可以建议最好的方法吗?
我最好的方法: 嵌套
嵌套数据类型
除了更容易查询之外,它更易于阅读和理解当前分散在不同数组中的那些对象之间的连接。
是的,如果您决定采用这种方法,则必须编辑映射并为整个数据重新编制索引。
映射将如何显示?像这样的东西:
{
"mappings": {
"properties": {
"last_updated": {
"type": "date"
},
"country": {
"type": "string"
},
"records": {
"type": "nested",
"properties": {
"price": {
"type": "string"
},
"max_occupancy": {
"type": "long"
},
"type": {
"type": "string"
},
"availability": {
"type": "long"
},
"size": {
"type": "string"
}
}
}
}
}
}
编辑:新文档结构(包含嵌套文档)-
{
"last_updated": "2017-10-25T18:33:51.434706",
"country": "Italia",
"records": [
{
"price": "€ 139",
"max_occupancy": 2,
"type": "Type 1",
"availability": 10,
"size": "26 m²"
},
{
"price": "€ 125",
"max_occupancy": 2,
"type": "Type 1 - (Tag)",
"availability": 10,
"size": "35 m²"
},
{
"price": "€ 120",
"max_occupancy": 1,
"type": "Type 2",
"availability": 10,
"size": "47 m²"
},
{
"price": "€ 108",
"max_occupancy": 1,
"type": "Type 2 (Tag)",
"availability": 10,
"size": "31 m²"
}
]
}
现在,使用嵌套查询和内部匹配可以更轻松地查询任何特定条件。例如:
{
"_source": [
"last_updated",
"country"
],
"query": {
"bool": {
"must": [
{
"term": {
"country": "Italia"
}
},
{
"nested": {
"path": "records",
"query": {
"bool": {
"must": [
{
"range": {
"records.max_occupancy": {
"gte": 2
}
}
}
]
}
},
"inner_hits": {
"sort": {
"records.price": "asc"
},
"size": 1
}
}
}
]
}
}
}
条件是:Italia
AND max_occupancy > 2
。
内部点击: 按价格升序排序并获得第一个结果 。
希望你会发现它有用
提取过滤器用于过滤数据源中提取的数据。如果用户从数据源中提取数据,则使用此过滤器。 将文本文件连接到Tableau后,可以在数据源选项卡的右上角看到两个选项“实时(Live)”和“提取(Extract)”。 实时连接直接连接到数据源。提取连接从数据源中提取数据,并在Tableau存储库中创建本地副本。下面逐步给出创建提取过滤器的过程。 第1步:使用Tableau连接文本文件。 单击“提取(Extr
问题内容: 这是我的代码。请运行脚本以查看其工作方式: 从上面的代码中,我的数据数组包含对象,这些对象具有用户名,他的电话号码和他所属的呼叫队列。 我分别有四个呼叫队列111,456,201和665。 一个用户可以处于任意数量的呼叫队列中。我已经过滤了控制器中的数据,以使其仅显示前端中属于队列111或队列456的用户。 因此,根据我的代码,用户Edmond属于队列665,因此其详细信息不会显示在前
这看起来很容易,但却不知道该怎么做。当前数组数据是按日期和日期列出的,因此我需要将所有日期组合起来:天、月、6个月、1年。我需要将数组数据排列为下面的第二个数组。
问题内容: 我正在建立一个显示api数据的项目,现在我需要对其进行过滤。 我已经完成了类别过滤器,现在我必须做一个价格范围过滤器,以便这两个过滤器可以一起工作,但是我在努力正确地做到这一点。对于价格范围过滤器,我使用2个输入和一个Submit按钮。 我得到了一系列对象,看起来像这样; 我有状态: 如果我的弯管机状态已更改,则设置状态的功能另外,对于开始状态和结束状态,也有类似的功能当我为价格设置状
用spring云网关构建新的API网关。目前经历以下挑战。
我有以下数据框: 我想根据以下条件对其进行过滤: 创建的角度=范围(87-92) GDT 1和GDT 2之间的距离 到目前为止我尝试了这个(最后一个方法): 此代码的输出是一个没有错误的空数据库。