Я пытаюсь использовать текстовый поиск mongo для замены существующего запроса, использующего $ regex для нескольких полей, и обнаружил, что результаты не соответствуют ожиданиям.Я создал небольшой пример ниже, чтобы продемонстрировать:
db.pers.insert({ 'name': 'Thoma', 'firstName': 'Albert'})
db.pers.insert({ 'name': 'Thoma', 'firstName': 'Berta'})
db.pers.insert({ 'name': 'Thoma', 'firstName': 'Charlie'})
db.pers.insert({ 'name': 'Thomas', 'firstName': 'David'})
db.pers.createIndex( {name: "text"} )
db.pers.find( {$text: { $search: 'Thomas'} }, { 'score': { $meta: 'textScore' } } ).pretty()
... и вот результаты:
{
"_id" : ObjectId("5d88a2914185d8425164d564"),
"name" : "Thomas",
"firstName" : "David",
"score" : 1
}
{
"_id" : ObjectId("5d88a2674185d8425164d561"),
"name" : "Thoma",
"firstName" : "Albert",
"score" : 1.1
}
{
"_id" : ObjectId("5d88a26e4185d8425164d562"),
"name" : "Thoma",
"firstName" : "Berta",
"score" : 1.1
}
{
"_id" : ObjectId("5d88a2794185d8425164d563"),
"name" : "Thoma",
"firstName" : "Charlie",
"score" : 1.1
}
Я удивлен, что точное совпадение Thomas
получает меньшеоценка, чем другие результаты.
Я хочу использовать счет для сортировки.Результат как таковой хорош, потому что я хочу найти Thoma
в примере выше.Тем не менее, я также хотел бы, чтобы точное совпадение было в верхней части результатов поиска.
Любые отзывы о баллах или предложения по различным решениям приветствуются.