Join ElasticSearch联接筛选器:是否可以使用子查询结果作为筛选器输入?
我有一个使用ElasticSearch进行实时分析的用例。在这里面,我希望能够计算一些简单的亲和力分数 这些当前是使用按标准筛选的用户库执行的事务数(与完整用户库相比)来定义的 根据我的理解,我需要做以下工作:Join ElasticSearch联接筛选器:是否可以使用子查询结果作为筛选器输入?,join,filter,elasticsearch,subquery,term,Join,Filter,elasticsearch,Subquery,Term,我有一个使用ElasticSearch进行实时分析的用例。在这里面,我希望能够计算一些简单的亲和力分数 这些当前是使用按标准筛选的用户库执行的事务数(与完整用户库相比)来定义的 根据我的理解,我需要做以下工作: 获取筛选用户群的不同事务 在完整的用户库中查询这些事务(类型) 进行计算(标准化等) 为了获得过滤后的用户群的“不同事务”,我目前使用了一个术语过滤器查询,该查询带有faceting,它返回所有术语(事务类型)。据我所知,在第二步中,我需要使用这个结果作为术语过滤器查询的输入,以便能够接
curl -XPUT 'http://localhost:9200/store/user/_mapping' -d '
{
"user": {
"properties": {
"user_id": { "type": "integer" },
"gender": { "type": "string", "index" : "not_analyzed" },
"age": { "type": "integer" },
"age_bracket": { "type": "string", "index" : "not_analyzed" },
"current_city": { "type": "string", "index" : "not_analyzed" },
"relationship_status": { "type": "string", "index" : "not_analyzed" },
"transactions" : {
"type": "nested",
"properties" : {
"t_id": { "type": "integer" },
"t_oid": { "type": "string", "index" : "not_analyzed" },
"t_name": { "type": "string", "index" : "not_analyzed" },
"tt_id": { "type": "integer" },
"tt_name": { "type": "string", "index" : "not_analyzed" },
}
}
}
}
}'
因此,对于我的示例用例的实际期望结果,我有以下内容:
下面是一个可运行示例的链接: 它假定文档如下所示:
{ "transaction_type" : "some_transaction", "user_base" : "some_user_base_id" }
查询设置为不返回结果,因为聚合负责计算您要查找的统计数据:
{
"size" : 0,
"query" : {
"match_all" : {}
},
"aggs" : {
"distinct_transactions" : {
"terms" : {
"field" : "transaction_type",
"size" : 20
},
"aggs" : {
"by_user_base" : {
"terms" : {
"field" : "user_base",
"size" : 20
}
}
}
}
}
}
结果如下:
"aggregations": {
"distinct_transactions": {
"buckets": [
{
"key": "subscribe",
"doc_count": 4,
"by_user_base": {
"buckets": [
{
"key": "2",
"doc_count": 3
},
{
"key": "1",
"doc_count": 1
}
]
}
},
{
"key": "purchase",
"doc_count": 3,
"by_user_base": {
"buckets": [
{
"key": "1",
"doc_count": 2
},
{
"key": "2",
"doc_count": 1
}
]
}
}
]
}
}
因此,在“聚合”中,您将有一个“不同的_事务”列表。该键将是交易类型,单据计数将表示所有用户的总交易
在每一个“不同的”事务中,都有“按用户”基,这是另一个术语agg(嵌套)。与事务一样,键将表示用户库名称(或ID或其他名称),文档计数将表示唯一的用户库事务
这就是你想要做的吗?希望我能帮上忙。对于ElasticSerach的当前版本,有了新的
重要\u术语
聚合类型,可以用它以更简单的方式计算我的用例的相似性分数
所有与我相关的指标都可以在一个步骤中计算出来,这非常好 谢谢!如果我尝试运行它,我会收到“嵌套:SearchParseException[[transactions][0]:query[ConstantCore(:)],from[-1],size[0]:解析失败[No parser for element[aggs]]”错误。您能检查一下吗?sense.qbox.io上的localhost是否可能是0.90 ElasticSearch服务器?Tobi,很抱歉没有澄清。我提供的示例必须在1.0.0或更高版本上运行。如果您是从sense.qbox.io示例中点击localhost,那么您需要将本地ES升级到1.0.0以使用聚合。Ben,您能看看我的映射,看看您的方法是否也适用于嵌套文档吗?它肯定有效。试试这个:这就是你想要做的吗?github中引用此讨论的另一个问题是: