4

I have this users collection:

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

When I query this: db.users.find({'username': /anaro/i}) results are sorted in natural order (insertion order).

I would like to sort them in a similarity search-term order. In this case results should return by this order:

{
    "_id" : ObjectId("501faa19a34feb05890006d8"),
    "username" : "anarocha",
}
{
    "_id" : ObjectId("501faa18a34feb05890004f2"),
    "username" : "joanarocha",
}
{
    "_id" : ObjectId("501faa19a34feb05890005d3"),
    "username" : "cristianarodrigues",
}
double-beep
  • 4,567
  • 13
  • 30
  • 40
Francisco Costa
  • 6,135
  • 5
  • 33
  • 42

1 Answers1

2

Unfortunately, MongoDB doesn't support full text search ranking by default.

First of all, you will need a algorithm to calculate the similarity between strings. See following links:

String similarity algorithims?

String similarity -> Levenshtein distance

Then you need to write a javascript function using the algorithm to compare two strings to pass it in your query. See the following link to see how to achieve that:

Mongo complex sorting?

Community
  • 1
  • 1
M. Mennan Kara
  • 9,777
  • 1
  • 34
  • 39
  • 6
    It should be noted that using JavaScript based querying, especially something this extensive, will be slow enough to disqualify this approach for any sort of mid to high concurrency production environment. – Remon van Vliet Aug 17 '12 at 12:58