【问题标题】:Elasticsearch implementing sort by field and directionElasticsearch 实现按字段和方向排序
【发布时间】:2015-06-23 10:28:38
【问题描述】:

从昨天开始,我一直在阅读 documentation 和其他示例帖子,以了解如何将 按字段排序方向 添加到 my current query array here,但是这样远没有运气。我见过像 {"sort": {"_score": "desc"}, "query": { .... 这样的例子,但我无法安静地绕过它来修改我的数组,因为这是我第一次处理 ES。

我只需要:我希望能够按照ascdesc 的顺序按pricestock 排序。

每次我尝试更新我的数组以实现排序时,都会收到 {"error":{"code":0,"message":"Invalid option sort"}} 错误。

注意:查询数组被传递给Pagerfanta 以获取结果。

    $paginator = $this->productFinder->findPaginated($myArray)
        ->setMaxPerPage($limit)
        ->setCurrentPage($page);

【问题讨论】:

    标签: php symfony elasticsearch foselasticabundle


    【解决方案1】:

    这是一个例子:

    {
      "_source":true,
      "query":{
        "simple_query_string":{
          "query":"1*"
        }
      },
      "sort":[
        {
          "price":{
            "order":"desc",
            "missing":"_last"
          }
        },
        {
          "_score":{
            "order":"desc",
            "missing":"_last"
          }
        }
      ]
    }
    

    【讨论】:

    • 我根据您的建议更新了我的原始查询数组,并以this one 结束,但没有触及query 部分,因为它是必需的。因此,我看不出顺序有任何变化。
    • 当您将顺序更改为“asc”时会发生什么?您是否尝试过使用这些设置?
    • 我使用了这些设置,但似乎没有任何变化。结果完好无损。
    【解决方案2】:

    针对具体领域和方向:

    {
       "sort": {
          "price": "asc"
       }
       ... rest of the code
    }
    

    对于没有特定的排序(这是默认设置的):

    {
       "sort": {
          "_score": "desc"
       }
       ... rest of the code
    }
    

    【讨论】: