假设我有一张这样的桌子:
field1 field2 field3 id
a0 a030 a040 0
a0 a031 a041 0
a0 a032 a042 0
a1 a130 a040 1
它以拼花地板的形式存储。我需要在spark中读取表,在“field1”上执行groupBy,然后我需要在ES中存储一个嵌套字段(例如,称为“agg\u字段”),其中包含一个字典列表,其中包含字段2和字段3的值,这样文档将如下所示:
{
"_id": "0"
"field1" : "a0",
"agg_fields" : [
{
"field2" : "a030",
"field3" : "a040"
},
{
"field2" : "a031",
"field3" : "a041"
},
{
"field2" : "a032",
"field3" : "a042"
},
]
}
...
我可以阅读表格并进行分组:
df = sqlContext.read.parquet('some-table').groupBy('field1')
我可以做一些聚合并将结果发送给es:
df.withColumn(
'aggregated', concat('field2', lit('|'), 'field3')
).agg(
collect_set(aggregated)
).withColumnRenamed(
'collect_set(aggregated)', 'agg_fields'
).write.format(
'org.elasticsearch.spark.sql'
).mode(
'append'
).option(
'es.mapping.id', 'id'
).options(
**es_config
).option(
'es.resource', my_resource
).save()
但我不知道如何将聚合更改为嵌套的“agg\u fields”列,该列将被elasticsearch解释为嵌套字段。我该怎么做?
df = spark.read.load('file:///path/to/your/example.json', format='json')
df = df.withColumn('agg_fields', f.explode(df['agg_fields']))
df = df.groupBy(df['field1']).agg(f.collect_set(f.concat_ws('|', df['agg_fields']['field2'], df['agg_fields']['field3'])).alias('agg_fields'))
输出:
+------+---------------------------------+
|field1|agg_fields |
+------+---------------------------------+
|a0 |[a030|a040, a032|a042, a031|a041]|
+------+---------------------------------+
你是说这个吗?
问题内容: 我对ES还是相当陌生,并正在将其用于我的新项目。首先,我为客户提供了一个简单的映射,其中包含名字和姓氏以及付款信息对象列表。如果我在SQL中执行此操作,那将类似于客户表和具有1:许多关系的付款信息表。 这是我要执行的操作的一个简单示例:https : //gist.github.com/anonymous/6109593 我希望根据payInfos嵌套数组中的任何匹配项找到任何客户,即
问题内容: 我正在使用Java API对Elasticsearch进行CRUD操作。 我有一个带有嵌套字段的类型,我想更新此字段。 这是我对类型的映射: 当然,我的最终用户类型将具有其他参数。 现在,我想将此文档添加到我的嵌套字段中: 我在文档中搜索有关如何更新嵌套文档的信息,但找不到任何东西。例如,我在字符串中具有先前的JSON对象(我们将此字符串称为json)。我尝试了以下代码,但似乎无法正常
我试图通过使用术语筛选查找加入2个弹性搜索索引。我查阅了http://www.elasticsearch.org/blog/terms-filter-lookup/和http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-filter.html。这些示例查找像“followers”这
问题内容: 我有一个包含嵌套对象的文档,如下所示: 现在,我需要按书名(不是book_title)和年份(比如2014)来过滤书籍。我需要的输出将是: 当我使用嵌套过滤器时,即使它们不匹配,我也会得到所有嵌套对象。如何仅获取匹配的嵌套对象? 问题答案: 您需要使用以下嵌套功能。 在输出中,您将确切地获得期望的结果,即字段和嵌套数组中的匹配书。
Sup社区。我有个问题。我正在使用Elasticsearch 6.4 我的数据结构的一部分: 我需要得到按成本排序的文档desc,我需要排序dirs字段中的值date_by字段与nulls-first。 如何对嵌套字段内的值进行排序,而不按此嵌套字段对文档进行排序?
我使用Spring-Data-ElasticSearch2.0.8和ElasticSearch.2.2.0来动态搜索嵌套对象。 基本上,我的嵌套对象可以有很少的嵌套字段,但我希望在所有这些字段中动态搜索。例如,一个动物文档可以有3x个字段来描述它:名称/大小/描述。 我想在所有这些搜索,因为我的搜索结束点只是有一个‘描述’自由文本选项。因此,当用户在他的入口点键入'15'或'dog'时,搜索将检查