【问题标题】:How do I sort the search results according to the number of items in ElasticSearch?如何根据 ElasticSearch 中的项目数对搜索结果进行排序?
【发布时间】:2012-09-25 20:21:38
【问题描述】:

假设我在 ElasticSearch 中存储这样的文档:

{
    'name':'user name', 
    'age':43, 
    'location':'CA, USA', 
    'bio':'into java, scala, python ..etc.', 
    'tags':['java','scala','python','django','lift']
}

假设我使用 location=CA 进行搜索,如何根据 'tags' 中的项目数对结果进行排序?

我想在第一页列出标签数量最多的人。

【问题讨论】:

    标签: search elasticsearch


    【解决方案1】:

    您可以对包含标签数量的附加字段进行索引,然后您可以轻松地对结果进行排序。否则,如果您愿意在查询时支付一点性能成本,那么有一个很好的解决方案不需要重新索引您的数据:您可以基于这样的脚本sort

    {
        "query" : {
            "match_all" : {}
        },
        "sort" : {
            "_script" : { 
                "script" : "doc['tags'].values.length",
                "type" : "number",
                "order" : "asc"
            }
        }
    }
    

    您可以从基于脚本的排序部分中了解到:

    注意,对于基于单个自定义脚本的排序,建议使用, 改为使用 custom_score 查询,因为基于分数的排序更快。

    这意味着最好使用custom score query 来影响您的分数,然后按分数排序,如下所示:

    {
        "query" : {
            "custom_score" : {
                "query" : {
                    "match_all" : {}
                },
                "script" : "_score * doc['tags'].values.length"
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2016-05-21
      • 1970-01-01
      • 2013-07-10
      • 2021-04-06
      • 2021-01-23
      • 1970-01-01
      • 2021-10-26
      • 2014-02-21
      相关资源
      最近更新 更多