Я рассчитываю ранжировать мои массивы от наивысшего совпадения к наименьшему совпадению с помощью оператора перекрытия &&
, что-то вроде,
SELECT tags
FROM users, **rank here AS rank**
WHERE users.tags && query
ORDER BY rank DESC;
Я тогда надеялся, что смогу объединить это как мои ts_rank результаты полнотекстового поиска, если это возможно? Я не был уверен, поможет ли мне функция rank()
.
Заранее спасибо.
EDIT
Ожидаемые результаты - это что-то вроде первого получения значения с плавающей точкой из полнотекстового поиска в совершенно другом столбце;
SELECT
content, ts_rank(to_tsvector(content), query) AS rank
FROM
microposts,
plainto_tsquery('dc comics') query
WHERE
microposts.content @@ query
ORDER BY
rank DESC;
Что бы дать что-то вроде;
╔═════════════════════════════════════════════════╤═══════════╗
║ content │ rank ║
╠═════════════════════════════════════════════════╪═══════════╣
║ dc comics dc comics dc comics dc comics │ 0.986064 ║
╟─────────────────────────────────────────────────┼───────────╢
║ dc comics dc comics dc comics │ 0,911679 ║
╟─────────────────────────────────────────────────┼───────────╢
║ dc comics dc comics dc comics went to the beach │ 0.603393 ║
╟─────────────────────────────────────────────────┼───────────╢
║ dc comics dc comics went to the beach\r │ 0.340005 ║
╟─────────────────────────────────────────────────┼───────────╢
║ │ ║
╟─────────────────────────────────────────────────┼───────────╢
║ went to the beach. dc comics │ 0.0991032 ║
╟─────────────────────────────────────────────────┼───────────╢
║ It was great. went to the beach dc comics │ 0.0991932 ║
╚═════════════════════════════════════════════════╧═══════════╝
Затем выполняется ранжирование тегов на основе наиболее подходящего кода с таким кодом без ранжирования;
SELECT tags
FROM users
WHERE users.tags && ARRAY['chicken', 'cat', 'apple', 'monkey'];
И ожидал что-то вроде;
╔═══════════════════════════════╤══════╗
║ tags │ rank ║
╠═══════════════════════════════╪══════╣
║ {chicken, cat, apple, monkey} │ 4 ║
╟───────────────────────────────┼──────╢
║ {chicken, cat, apple} │ 3 ║
╟───────────────────────────────┼──────╢
║ {chicken, cat} │ 2 ║
╟───────────────────────────────┼──────╢
║ {chicken} │ 1 ║
╚═══════════════════════════════╧══════╝
Но поскольку я писал, если у меня есть подобные рейтинги и я пытался добавить их друг к другу, я могу получить смешанные результаты, так как я делаю больше, чем 1 полнотекстовый поиск и добавляю результаты, так что я получаю хороший сбалансированный результат там но если я добавлю числа, такие как 4 или 5, из поиска по тегам, то этот единственный поиск в этом столбце при добавлении, скажем, полнотекстовый поиск с очень низким рейтингом, превзойдет остальных, давая запись, которая соответствует всем или большинству тегов, но с низким С уважением к другим поискам.
Обновление Я думаю, что для этого лучше всего просто использовать @>
метод содержит для строгого поиска и, возможно, ленивый поиск с использованием &&
.