@cfmm

MongoDB text search и правильный textScore?

Есть коллекция(с текстовым индексом) примерно такого вида:
[{id: 1, "items" : [ "milk", "bread", "fish" ]},
{id: 2, "items" : [ "milk", "milk", "milk" ]},
{id: 3, "items" : [ "cheese", "salt" ]},
{id: 4, "items" : [ "fish", "bread"]}]


Нужно найти все документы, в которых в массиве items есть хотя бы один элемент, содержащий слова "milk", "bread" и "fish". И отсортировать результат, но не по общему количеству вхождений любых искомых слов(как делает код ниже), а по количеству одновременных вхождений искомых слов.

coll.find({$text:{"$search": "milk bread fish"}}, {score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})

Этот код сортирует результат следующим образом:
[{id: 2, "items" : [ "milk", "milk", "milk" ], "score": 3.3},
{id: 1, "items" : [ "milk", "bread", "fish" ], "score": 3.3},
{id: 4, "items" : [ "fish", "bread"], "score": 2.2}]

А мне нужно:
[{id: 1, "items" : [ "milk", "bread", "fish" ], "score" : 3},
{id: 4, "items" : [ "fish", "bread"], "score": 2},
{id: 2, "items" : [ "milk", "milk", "milk" ], "score": 1}]
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы