elasticsearch - Elasticsearch查找所有 'delivered'但不是 'opened'的消息

标签 elasticsearch elasticsearch-dsl

我有以下Elasticsearch索引数据:

id|message_id|   action|
 1|         1|delivered|
 2|         1|   opened|
 3|         2|delivered|
 4|         3|delivered|
 5|         4|delivered|
 6|         5|   opened|

如何查找所有“未打开”的消息?
预期结果:
id|message_id|   action|
 3|         2|delivered|
 4|         3|delivered|

最佳答案

对于单个查询而言,这将很困难,因为您的数据已被规范化,因此将需要自身进行连接,而ESIA真正不可能使用AFAIK。我认为有两种解决方案:

  • 使用操作的嵌套字段对数据进行非规范化。
  • 使用两个查询:在第一个查询中,您检索所有传递的消息。对于第二个查询,您可以使用第一个查询中的 message_ids ,并使用 bool(boolean) 过滤器将ids filterterm filter组合在一起,以获取未打开的查询。
  • 关于elasticsearch - Elasticsearch查找所有 'delivered'但不是 'opened'的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29622284/

    相关文章:

    elasticsearch - Elasticsearch嵌套过滤器包含与不包含

    python - 重新索引后对弹性索引进行搜索时,是否存在行为不一致的原因?

    django - ElasticSearch-python中的完成建议的批量索引

    elasticsearch - TypeError: 'IndicesClient'对象不可调用

    elasticsearch - Elasticsearch查询以查找查询字符串的子字符串

    elasticsearch - 每天的文档数存储桶并应用了一些过滤器

    elasticsearch - ElasticSearch中所有文档的高效 “real time”检索

    ElasticSearch 匹配具有不同值的多个字段

    ruby - 轮胎搜索返回项的首字母

    elasticsearch - 术语与术语查询的评分不同