elasticsearch - Elasticsearch:如果存在其他记录,则排除结果

标签 elasticsearch elasticsearch-dsl

我有以下 Elasticsearch 索引结构:

id|action|user_id|message_id
 1| click|      1|         1
 2|  open|      1|         1
 3| click|      2|         1
 4|  open|      2|         1
 5| click|      1|         2
 6| click|      1|         2
 7| click|      3|         2

想法是为每个缺少带有 Action :“open”的记录的user_id-message_id插入带有 Action :“open”的记录。为此,仅当所有user_id-message_id关联尚无 Action 时,才需要获取它们:'open'。

如果表还具有带有action:open的记录并且具有相同的user_id-message_id关联,是否可以创建一个查询来返回不同的user_id-message_id记录(不包括user_id-message_id)?

预期结果:
 5| click|      2|         1
 7| click|      3|         2

最佳答案

好了,您可以通过在查询和topN hits聚合方面编写一些脚本来实现此目的。

{
  "query": {
    "filtered": {
      "filter": {
        "not": {
          "term": {
            "action": "open"
          }
        }
      }
    }
  },
  "aggs": {
    "keys": {
      "terms": {
        "script": "doc['message_id'].value + doc['user_id'].value"
      },
      "aggs": {
        "results": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}

关于elasticsearch - Elasticsearch:如果存在其他记录,则排除结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326265/

相关文章:

elasticsearch - 包含动态数据/nested_objects的聚合

elasticsearch - Elasticsearch整个文档搜索(智能搜索)

elasticsearch - Elasticsearch将范围和术语连接到同一数组项

mongodb - 如何处理Elasticsearch中包含 '_'的字段?

elasticsearch - 如何在不进行任何修改的情况下从聚合中返回数据(字符串)?

java - Spring 启动执行器中的 Elasticsearch 运行状况检查有时会返回状态

django - Django Elasticsearch dsl drf或查询

elasticsearch - ElasticSearch中无法解释的计数结果

elasticsearch - 在Elasticsearch中将逗号分隔的元素计数为值

elasticsearch - 使用NEST的日期范围搜索不会返回数据