如何根据 ElasticSearch 中的项目数对搜索结果进行排序?

2024-01-17

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

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

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

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


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

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

正如您可以从基于脚本的排序部分中读到的:

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

这意味着最好使用自定义分数查询 http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query.html影响你的分数,然后按分数排序,如下所示:

{
    "query" : {
        "custom_score" : {
            "query" : {
                "match_all" : {}
            },
            "script" : "_score * doc['tags'].values.length"
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据 ElasticSearch 中的项目数对搜索结果进行排序? 的相关文章

随机推荐