簡體   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