簡體   English   中英

如何使用 Go Olivere/elastic 基於多個字段進行排序

[英]How to sort based on multiple fields with Go olivere/elastic

幾天來,我一直在嘗試了解如何使用 Go olivere/elastic基於多個字段進行排序。 我正在嘗試將其翻譯成 Go

{
    "sort" : [
        "name",
        { "age" : "desc" },
    ],
}

我嘗試使用NewFieldSort()並在搜索服務中提供一些SortBy() 它適用於一個SortBy()但不適用於兩個SortBy() 它返回Error 400 (Bad Request): all shards failed [type=search_phase_execution_exception]

這是我的代碼

    sortQuery1 := elastic.NewFieldSort("name")
    sortQuery2 := elastic.NewFieldSort("age").Desc()

    searchService := esclient.Search().
        Index("students").
        SortBy(sortQuery1).
        SortBy(sortQuery2)

    searchResult, err := searchService.Do(ctx)

你們對嘗試什么有什么建議嗎? 提前致謝!

您在示例中使用的SortBy是可變參數,從簽名中可以看出: SortBy(sorter...Sorter) *SearchService

所以你只需要用你的過濾條件調用一次:

    sortQuery1 := elastic.NewFieldSort("name")
    sortQuery2 := elastic.NewFieldSort("age").Desc()

    searchService := client.Search().
        Index("students").
        SortBy(sortQuery1, sortQuery2)

將此請求正文編組到 JSON 后,它將如下所示:

{
    "sort": [
        { "name": { "order": "asc" } },
        { "age": { "order": "desc" } }
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM