弹性搜索获得不同的随机字段值

时间:2017-10-26 11:12:36

标签: elasticsearch

我们有弹性搜索文档,其中包含以下字段:

{
  "stockId": 1
  "sellerId": 100
}

多个stockId可以映射到单个sellerId,但一个股票只能映射到一个经销商。大约有1万只股票映射到1K卖家。但每个卖家可能会有不同数量的股票,即少数可能有100只,而其他只有1只。

问题陈述:我们希望从索引的所有这些文档中选择“N”个随机文档。条件是这些'N'文件中的每一个应该属于不同的卖方,即不同的“卖方ID”。 (我们需要给这些卖家奖励。)

我尝试了什么:我试图通过弹性查询来解决这个问题,该查询提取“N”随机不同的“sellerId”。 (然后弹性查询以获取每个'N'卖家的1个文档)。一种方法可能是聚合'sellerId',然后选择随机'N'键,但这不是理想的方法性能明智。有人可以帮助更好的查询吗?

1 个答案:

答案 0 :(得分:-1)

我会重建我的映射以创建嵌套文档类型,卖方是父类,stockid是嵌套对象:

{
  "sellerid" : {"type" : "integer" },
  "stock_obj" : {
    "type" : "nested",
    "properties" : {
      "stockid" : { "type" : "integer" }
    }
}

重建索引时,每个卖家只能创建一个对象。每个卖家都有他们所有的股票ID。看起来每个卖家大约有10只股票,elasticsearch可以处理这个罚款。 (如果每个卖家有数千只股票,我会这样做不同)

然后,我会搜索N个卖家sorted randomly,然后作为第二个排序字段,您将随机排序股票ID。不是最简单的映射,但查询很简单,应该很快。

另外,另外,如果你只是处理~10k整数的卖家/股票数据点,使用elasticsearch可能是矫枉过正。它可以做你想要的,但它的主要目的是搜索大量的文本。