Tôi đang sử dụng bát quái để tìm kiếm toàn văn trong postgres như thế này:Làm thế nào để thực hiện bản đồ đơn giản giảm trong Postgres?
SELECT *
FROM "Users" users
WHERE 'search_text' % ANY(regexp_split_to_array(users.name,E'\\s+'))
Query trên kiểm tra nếu search_text
phù hợp với bất kỳ từ nào (chia bởi whitespace
) trong User.displayName
. Tuy nhiên, kết quả này không được sắp xếp theo "điểm số" thực tế.
Điểm có thể được tính bằng hàm similarity(text,text)
.
Vấn đề là tôi phải sắp xếp theo thứ tự tổng hợp tất cả các điểm giống nhau được tìm thấy cho mỗi từ trong User.name
. Vì vậy, nếu tên người dùng là "A B C"
sau đó điểm của nó nên là:
similarity('search_text','A') + similarity('search_text','B') + similarity('search_text','C')
Vì vậy, tôi cần để ánh xạ từ tên người dùng để điểm số và sau đó sum (giảm) cho họ. Làm thế nào tôi có thể làm điều này trong postgres?