当前位置: 首页 > 知识库问答 >
问题:

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

孔阎宝
2023-03-14

我有以下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

其思想是为每个用户id-message\u id插入带有操作“open”的记录,该用户id-message\u id缺少带有操作“open”的记录。为此,我需要获取所有user\u id-message\u id关联,前提是它们没有动作:“open”。

是否可以创建一个查询,返回不同的user_id-message_id记录不包括user_id-message_id如果表也有记录与动作:打开和相同的user_id-message_id关联?

预期结果:

 5| click|      2|         1
 7| click|      3|         2

共有1个答案

白星腾
2023-03-14

好的,您可以通过在查询和topN点击聚合方面编写少量脚本来实现这一点。

{
  "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
          }
        }
      }
    }
  }
}
 类似资料:
  • 问题内容: 我正在尝试在两个SQL Server 2008表之间移动一些数据。如果该记录存​​在于表2中,并且带有来自表1的电子邮件,则使用来自表1的数据更新该记录,否则插入新记录。 在表1中,我有许多列;名字,姓氏,电子邮件等。 我不确定如何构造查询以更新Table2(如果来自Table1的电子邮件存在)或插入新行(如果Table2中不存在来自Table1的电子邮件)。 我尝试在Google上进

  • 问题内容: 我想要做的就是在我的数据库的用户,但它应该排,一个新行。 Ofcourse我连接到数据库第一和的,并从URL字符串。 可以,但是只添加新行; 这是我尝试过的; 和 和 但是它们都不起作用,我在做什么错? 任何帮助是极大的赞赏! 问题答案: 如果不存在约束,请在您的列上创建约束: 用途: (subs_name, subs_email, subs_birthday) VALUES (?,

  • 问题内容: 我如何执行搜索,排除字段具有特定值的结果? 我有一个Reddit评论数据库,我想找到提及比特币的信息,但不包括bitcoin subreddit。 错误很长,无法在此处发布。https://gist.github.com/kylelk/feca416156712eebad3e 问题答案: 这是愚蠢的错误, 您必须在query中包含过滤查询。这是修改 希望这可以帮助!!

  • 问题内容: 我需要返回不包含具有特定ID的文档的结果。Elasticsearch允许我们指定允许使用哪些ID,但是我看不到任何禁止某些ID的方法。在我的情况下,我不想返回用户已经看到的内容,因此每个用户的列表都不同。 问题答案: 您可以通过添加一个过滤器来实现此目的,该过滤器包含一个过滤器,该过滤器带有您不想显示的ID数组,如下所示:

  • 我在ElasticSearch中索引了很多产品。我需要从ElasticSearch中的查询中排除ID列表(我从SQL数据库中获取)。假设产品存储为, 我们基于使用ElasticSearch的一些算法向客户显示推荐产品的列表。如果一个顾客把一个产品标记为‘不感兴趣',我们就不必再给他看那个产品了。我们将这些产品保存在一个单独的SQL表中,表中有product_id、customer_id,状态为'n

  • 问题内容: 我当前正在使用sed脚本: cd(根文件夹)优先 当前,此脚本在标记下删除了所有文件夹(包括其子文件夹)上的,例如xml: 所以现在,我需要排除的是那些带有“ scheduler-service- core”或基本上是调度程序的标签,因为我不需要解析它,但是我的脚本正在删除它,因为它在依赖项标签下,我该如何排除这一点?“调度程序”一词将发生变化,因为我将在不同的服务上使用此词,因此脚本