将Elastic中的多个搜索组合为一个,以减少HTTP调用(使用Java高级REST客户端)

时间:2018-10-31 10:25:03

标签: java elasticsearch

(以下示例来自真实的业务逻辑,已对其进行了更改,以便在此处发布)。

在我们的Pub应用程序中,我们有一个Elastic Search,其中包含如下所示的记录:

  • 客户名称
  • 他喝了什么
  • 多少钱

一个虚构的样本:

{
   "name": "Alice",
   "drink": "Beer",
   "amount": "2"
}
{
  "name": "Alice",
  "drink": "Coffee",
   "amount": "1"
}
{
  "name": "Alice",
  "drink": "Tea",
   "amount": "5"
}
{
 "name": "Bob",
 "drink": "Coffee",
 "amount": "3"
 }
 {
  "name": "Bob",
  "drink": "Daiquiri",
  "amount": "1"
 }
  .....  

Elastic Search文档结构无法更改,我们必须使用此结构来完成任务。

当客人索要账单时,侍酒者需要计算客人的酒精饮料和咖啡师需要计算客人的不含酒精饮料的账单。

因此,如果Alice正在签出,则 Barista 当前对Elastic的调用如下:

    SearchRequest searchRequest = new SearchRequest(....);
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    queryBuilder.must(QueryBuilders.termQuery("name", "Alice"));
    queryBuilder.must(QueryBuilders.termsQuery("drink", "Coffee", "Tea", "Coca Cola"....));

我们希望提高通话效率,因此,如果同时有10个客户结帐,我们的咖啡师只能执行一个HTTP请求以弹性化并每个客户获取相关信息。

There is the MultiSearch option,但是由于我们所有的请求都非常相似,因此我们想知道是否有其他方法。

0 个答案:

没有答案