弹性搜索:如何根据文档的唯一标识符选择不同的随机不同列表?

时间:2017-10-09 15:22:10

标签: elasticsearch unique distinct aggregation cardinality

我们有关于具有以下键值对的汽车库存的ES文件:

{
  "stockid":1,
  "car": "bmw"
  "dealerid": "d1"
},
{
  "stockid":2,
  "car": "audi"
  "dealerid": "d1"
},,
{
  "stockid":3,
  "car": "mercedes"
  "dealerid": "d1"
},,
{
  "stockid":4,
  "car": "bentley"
  "dealerid": "d2"
},
{
  "stockid":5,
  "car": "range rover"
  "dealerid": "d1"
}

有上千种这样的文件。该文档包含更多字段,我刚刚过度简化它并仅指定必要的字段来理解查询。

我们想根据dealerid随机选择'N'股票。例如,如果有人查询上述股票文件,尽管交易商“d1”有4只股票而且“d2”只有1只股票有数千种,因此获得“d1”或“d2”股票的概率相等。经销商也从“d1”到“dXXXX”这个名单不断变化。

有人可以帮我写这个弹性查询吗?

1 个答案:

答案 0 :(得分:0)

您是否愿意重组索引?您可以使用Parent Child方法。 dealers是父母,stocks是孩子,然后您可以轻松使用随机种子查询经销商或每个经销商的股票,因为文档将是唯一的。

能够通过查询stocks个孩子来复制当前查询,因为您仍然可以使用has_parent(或{{}以非规范化方式访问父字段{1}}相反的方向)

PUT / cars

has_child

GET / cars / dealers / _search

{
    "mappings" : {
        "dealers" : { },
        "stocks" : {
            "_parent" : {
                "type" : "dealers"
            }
        }
    }
}