Мне удалось написать запрос, который фильтрует некоторые объекты Post по их заголовку или телу:
router.get("posts", "list") { req -> Future<[Post]> in
let searchText = req.query[String.self, at: "searchText"]!
return Post.query(on: req).group(.or, closure: { query in
query.filter(\Post.title ~~ searchText)
query.filter(\Post.body ~~ searchText)
})
}
Это работает, в том смысле, что я могу проверить, что все сообщения, которые не содержат Параметр searchText в их заголовке или теле отфильтровывается. Теперь для моего следующего шага, я хотел бы отсортировать эти результаты по их релевантности.
Пример данных:
1) Заголовок: "Hello, world!", Тело: "test msg".
2) Заголовок: "Hello!", Body: "..."
3) Название: "Привет", тело: "!"
Мне бы хотелось, чтобы у вас был запрос «поиск по сходству», чтобы результаты не были строго отфильтрованы и упорядочены по релевантности. Таким образом, с указанными выше данными, если я ищу строку «Hello!», Я хотел бы получить что-то вроде:
2) Title: «Hello!», Body: «...»
1) Title : "Hello, world!", Body: "test msg"
И третий пост будет отфильтрован из поиска, потому что релевантность недостаточно высока. Я понимаю, что это не совсем детерминированная c, а четко определенная проблема. Но я хотел бы понять, хорошо ли что-то уже есть, а если нет, то какой хороший подход следует использовать для решения этой проблемы.