Определение
Я создаю поисковое приложение, а mongo db используется для хранения поисковой информации. Это пример набора данных коллекции "Ресурс".
{
_id:"5b3b84e02360a26f9a9ae96e",
name:"Advanced Java",
keywords:[
"java", "thread", "state", "public", "void"
]
},
{
_id:"5b3b84e02360a26f9a9ae96f",
name:"Java In Simple",
keywords:[
"java", "runnable", "thread", "sleep", "array"
]
}
Содержит названия книг и наиболее часто встречающиеся слова (в массиве ключевых слов) каждой из них. Я использую весенние рамки с шаблоном Монго. Если я запускаю ниже код,
MongoOperations mongoOperations = new MongoTemplate(new MongoClient("127.0.0.1", 27017), "ResourceDB");
Query query = new Query(where("keywords").in("java", "thread", "sleep"));
List<Resource> resources = mongoOperations.find(query, Resource.class);
Это приводит к "Advanced Java" и "Java In Simple", и все в порядке.
Задача
Но в моем случае они мне нужны по порядку. Потому что «Java In Simple» соответствует 3 словам, а «Advanced Java» соответствует только 2 словам. Таким образом, наиболее подходящей книгой должна быть «Java In Simple», и она должна быть первой.
Ожидается заказ
- Java In Simple
- Продвинутая Java
Можно ли получить результат в соответствующем порядке. Или есть ли способ получить количество совпадений для каждого элемента. Например, если поиск («java», «thread», «sleep»), я ожидаю вывод, как показано ниже.
- Продвинутая Java - 2 совпадения
- Java в простом - 3 совпадения
Любая помощь приветствуется.