如何根据提供的数组对$ in结果中的元素进行排序

时间:2019-05-14 06:07:51

标签: node.js mongodb elasticsearch

我正在使用弹性搜索而不是mongoDB来建立索引。找到结果后,我将它们作为_id数组传递给mongo,以查找项目并返回包含所有字段的记录。我需要根据_id提供的顺序对mongo的结果进行排序。我该如何实现?

当前,Mongo用与提供的数组不匹配的另一种顺序对它们进行排序。

root@xxxxxx:/# /var/xxxxxx/apache-jmeter-5.1/bin/jmeter -v
    _    ____   _    ____ _   _ _____       _ __  __ _____ _____ _____ ____
   / \  |  _ \ / \  / ___| | | | ____|     | |  \/  | ____|_   _| ____|  _ \
  / _ \ | |_) / _ \| |   | |_| |  _|    _  | | |\/| |  _|   | | |  _| | |_) |
 / ___ \|  __/ ___ \ |___|  _  | |___  | |_| | |  | | |___  | | | |___|  _ <
/_/   \_\_| /_/   \_\____|_| |_|_____|  \___/|_|  |_|_____| |_| |_____|_| \_\ 5.1 r1853635

Copyright (c) 1999-2019 The Apache Software Foundation

我希望基于Elasticsearch的得分,“ ron”之类的查询结果如下

   let res = await ElasticClient.search({
        index: 'couch-players',
        type: 'players',
        body: {
            query: {
                match_phrase_prefix: {
                    "name": params.request.query
                }
            },
            size: 20
        }
    });

    let hits = res.hits.hits
    let _players = []
    hits.forEach(hit => {
        console.log(hit._score,hit._source.name)
        _players.push(hit._id)
    });

    let players = await models.Player.find({ _id: { $in: _players } });
    console.log(players)

但这是我从mongoDB获得的命令

8.953053 'Ronaldo'
8.311888 'Ronaldinho'
7.8170676 'Ronny'
7.1338925 'Ronald Zubar'
7.1338925 'Cristiano Ronaldo'
7.1152616 'Facundo Roncaglia'
7.115095 'Ronald Zubar'
6.555755 'Ronny Philp'
6.555755 'Connor Ronan'
6.555755 'Ronny Garbuschewski'
6.209852 'Ronny Philp'
5.9220033 'Ronael Pierre Gabriel'
5.858545 'Ron-Robert Zieler'
5.858545 'Ronael Pierre Gabriel'
5.436745 'Ronan Le Crom'

0 个答案:

没有答案