【问题标题】:Elasticsearch Sort based on value firstElasticsearch 基于值优先排序
【发布时间】:2015-09-09 05:52:54
【问题描述】:

我想对release date 上的结果进行排序。我首先想要2015 电影,其余年份按has_poster 值排序。所以我得到如下结果:

2015, 2015, 1989, 2017, 2006

等等

到目前为止,这就是我所拥有的。

$params['index'] = 'movies';
$params['type']  = 'movie';
$params['body']['size'] = 50;
$params['body']['sort'] = array(
    array('has_poster'  => "desc"),
    array('_score'  => "desc"),
);        
$params['body']['query']['filtered'] = array(
    'query' => array(
        'query_string' => array(
            'query' => "survivor",
            'fields' => array('name', 'orig_title'),
            'default_operator' => "AND"
        ),
    )
);

我需要与 MySQL 中的 ... ORDER BY FIELD(releasedate, 2015), has_poster DESC ... 等效的 Elasticsearch。

【问题讨论】:

    标签: php mysql sorting elasticsearch


    【解决方案1】:

    你需要一个脚本排序:

    {
      "sort": [
        {
          "_script": {
            "script": "if(doc['releasedate'].date.year==2015) return 1; else return 0;",
            "type": "number",
            "order": "desc"
          }
        },
        {
          "has_poster": "desc"
        }
      ]
    }
    

    【讨论】:

    • 我刚试过这个,但在 PHP (laravel) 中出现 BadRequest400Exception 错误。如果我注释掉 _script 部分,我会再次得到结果。
    • ScriptException[scripts of type [inline], operation [search] and lang [groovy] are disabled]; }] 您需要在 Elasticsearch 中启用动态脚本。
    • 哦。我会尝试一下,如果它有效,我会告诉你。谢谢!
    • 但是我需要让您知道elastic.co/blog/… 并建议将脚本存档。但是,在那之前,看看脚本本身是否适合你。
    【解决方案2】:

    我不工作 =>类型名称是字符串

    $params['body']['sort']= array('name' => 'desc' );
    

    $params=[
                    'index'=>'pets',
                    'type'=>'bird',
                    'body'=>[
                        'query'=>[
                            'bool'=>[
                                'must'=>[],
                                'filter'=>[
                                    'range'=>[
                                        'registered'=>[
                                        'gte' => "2020-10-01", 
                                        'lte' => "2020-11-30"]
                                    ]
                                ]
                            ]
                        ],
                        'sort'=>[
                            'name'=>[
                                'order'=>'asc'
                            ]
                        ]
                        
                    ]
                ];
    

    但不工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多