elasticsearch 弹性搜索将筛选器应用于聚合数据
我有一个包含用户位置的索引,我想为每个用户选择最新位置,然后对最新位置应用一些复杂的过滤器。我设法使用聚合和排序来拾取最新的位置,但是我找不到一种方法在之后对其应用过滤器 筛选器或post_筛选器不会产生预期结果,因为它们应用于命中而不是聚合位置。我看到一些关于Bucket脚本聚合的评论,但可用的示例非常简单。 在弹性搜索中有什么办法吗?这是一个非常简单的SQL脚本。感谢您的帮助 对聚合位置的ES查询示例: 示例SQL查询(过于简化,不基于实际数据): 样本数据: 用户id位置位置源类型已创建活动组织id 1(0,0)112020-01-01 1123 1(0,0)112020-02-01 1123 1(9,9)112020-03-01 1123 2(8,8)112020-04-01 1123 预期结果: 1(9,9)112020-03-01 1123 2(8,8)112020-04-01 1123 这是我要应用于聚合数据的过滤器示例:elasticsearch 弹性搜索将筛选器应用于聚合数据,elasticsearch,lucene,aggregation,elasticsearch,Lucene,Aggregation,我有一个包含用户位置的索引,我想为每个用户选择最新位置,然后对最新位置应用一些复杂的过滤器。我设法使用聚合和排序来拾取最新的位置,但是我找不到一种方法在之后对其应用过滤器 筛选器或post_筛选器不会产生预期结果,因为它们应用于命中而不是聚合位置。我看到一些关于Bucket脚本聚合的评论,但可用的示例非常简单。 在弹性搜索中有什么办法吗?这是一个非常简单的SQL脚本。感谢您的帮助 对聚合位置的ES查询示例: 示例SQL查询(过于简化,不基于实际数据): 样本数据: 用户id位置位置源类型已创建活
"post_filter": {
"bool": {
"should": [{
"bool": {
"must": [
{
{ "term": { "location_source_type": 1 }},
{ "term" : { "org_id" : "123" }}
},
{
"range": { "created": { "lte": "2020-01-01T00:00:00" } }
}
],
"filter": [{
"geo_distance": {
"distance": "1000km",
"location": {
"lat": 9,
"lon": 9
}
}
}]
}
}]
}
}
您要应用什么筛选器?您可以分享您的索引映射、示例数据和预期的搜索结果吗?您可以分享您心目中的SQL查询吗?@Bhavya I更新了描述以回答您的问题。谢谢大家!@Val I更新了描述以回答您的问题。非常感谢。
SELECT subquery.* FROM
(
SELECT
ROW_NUMBER() OVER(PARTITION BY UserId ORDER BY Created DESC) AS "RowNumber",
UserId,
Latitute,
Longitude,
Active,
OrganizationId
FROM Locations
) subquery
WHERE subquery.RowNumber = 1 AND Latitude < 10 AND Longitude > 0 AND Active = 1 AND OrganizationId = 123
{
"mappings": {
"properties": {
"user_id": {
"type": "integer"
},
"location": {
"type": "geo_point"
},
"location_source_type": {
"type": "integer"
},
"created": {
"type": "date"
}
"active": {
"type": "integer"
},
"org_id": {
"type": "integer"
}
}
}
}
"post_filter": {
"bool": {
"should": [{
"bool": {
"must": [
{
{ "term": { "location_source_type": 1 }},
{ "term" : { "org_id" : "123" }}
},
{
"range": { "created": { "lte": "2020-01-01T00:00:00" } }
}
],
"filter": [{
"geo_distance": {
"distance": "1000km",
"location": {
"lat": 9,
"lon": 9
}
}
}]
}
}]
}
}