【问题标题】:Sort results by search term similarity按搜索词相似度对结果进行排序
【发布时间】:2019-02-02 03:56:52
【问题描述】:

我有这个用户集合:

{
    "_id" : ObjectId("501faa18a34feb05890004f2"),
    "username" : "joanarocha",
}
{
    "_id" : ObjectId("501faa19a34feb05890005d3"),
    "username" : "cristianarodrigues",
}
{
    "_id" : ObjectId("501faa19a34feb05890006d8"),
    "username" : "anarocha",
}

当我查询时:db.users.find({'username': /anaro/i}) 结果按自然顺序(插入顺序)排序。

我想按相似性搜索词顺序对它们进行排序。在这种情况下,结果应按此顺序返回:

{
    "_id" : ObjectId("501faa19a34feb05890006d8"),
    "username" : "anarocha",
}
{
    "_id" : ObjectId("501faa18a34feb05890004f2"),
    "username" : "joanarocha",
}
{
    "_id" : ObjectId("501faa19a34feb05890005d3"),
    "username" : "cristianarodrigues",
}

【问题讨论】:

    标签: mongodb sql-order-by similarity


    【解决方案1】:

    很遗憾,MongoDB 默认不支持全文搜索排名。

    首先,您需要一个算法来计算字符串之间的相似度。请参阅以下链接:

    String similarity algorithims?

    String similarity -> Levenshtein distance

    然后您需要编写一个javascript function 使用算法来比较两个字符串以将其传递到您的查询中。请参阅以下链接以了解如何实现这一目标:

    Mongo complex sorting?

    【讨论】:

    • 应该注意的是,使用基于 JavaScript 的查询,尤其是如此广泛的查询,将慢到足以使这种方法无法用于任何类型的中高并发生产环境。
    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 2011-11-26
    • 2014-05-24
    • 2011-03-05
    • 2013-08-19
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    相关资源
    最近更新 更多