2017-10-09 31 views
0

我们有有以下键值对汽车股的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”的经销商也在不断变化。

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

回答

0

您是否愿意重组您的索引?您可以使用Parent Child方法。 dealers是父母,stocks是孩子,那么你可以很容易地使用随机种子来查询每个经销商的经销商或股票,因为这些文件是独一无二的。

应该能够通过查询在stocks孩子复制当前的查询,因为你可以使用has_parent(或has_child相反方向)

PUT /汽车

仍然可以访问的非规范化的方式父域
{ 
    "mappings" : { 
     "dealers" : { }, 
     "stocks" : { 
      "_parent" : { 
       "type" : "dealers" 
      } 
     } 
    } 
} 

GET /汽车/经销商/ _search

{ 
    "query" : { 
     "function_score" : { 
      "functions" : [ 
       { 
        "random_score" : { 
         "seed" : "randawefawfm" // generate this 
        } 
       } 
      ] 
     } 
    }, 
    "size" : N 
}