繁体   English   中英

弹性搜索的自定义排序

[英]Custom ordering on elastic search

我正在执行一个简单的查询,它返回与 companyId 匹配的项目。

除了仅显示与特定公司匹配的客户外,我还希望与特定位置匹配的记录出现在顶部。因此,如果我以某种方式通过排序:“location=Johannesburg”,它将返回下面的数据和与特定匹配的项目位置将出现在顶部,然后是具有其他位置的项目。

数据:

{
  "clientId" : 1,
  "clientName" : "Name1",
  "companyId" : 8,
  "location" : "Cape Town"
},
{
  "clientId" : 2,
  "clientName" : "Name2",
  "companyId" : 8,
  "location" : "Johannesburg"
}

询问:

 {
      "query": {
        "match": {
          "companyId": "8"
        }
      },
      "size": 10,
      "_source": {
        "includes": [
          "firstName",
          "companyId",
          "location"
        ]
      }
    }

这样的事情在弹性中是否可能,如果是的话,这个概念的名称是什么?(我什至不确定谷歌如何解决这个问题)

它可以通过不同的方式完成。 最简单的(如果 go 仅与文本匹配)是使用带有should语句的bool查询。

bool 查询采用匹配越多越好的方法,因此每个匹配的 must 或 should 子句的分数将被加在一起以提供每个文档的最终 _score。 文档

例子:

{"query":
   "bool": {
     "must": [
        "match": {
          "companyId": "8"
        }
      ],
     "should": [
        "match": {
          "location": "Johannesburg"
         }
      ]
     }
   }
}

更复杂的解决方案是将GEO点存储在位置中,并以距离特征查询为例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM