Свободно: Как отсортировать отфильтрованные объекты по релевантности? - PullRequest
0 голосов
/ 23 апреля 2020

Мне удалось написать запрос, который фильтрует некоторые объекты 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, а четко определенная проблема. Но я хотел бы понять, хорошо ли что-то уже есть, а если нет, то какой хороший подход следует использовать для решения этой проблемы.

...