Я использую триграммы для полнотекстового поиска в Postgres, как это:Как выполнить простую карту в Postgres?
SELECT *
FROM "Users" users
WHERE 'search_text' % ANY(regexp_split_to_array(users.name,E'\\s+'))
запрос выше проверок, если search_text
соответствует любому слову (разделенному на whitespace
) в User.displayName
. Это работает, однако результаты не упорядочены по фактической «оценке».
Оценка может быть определена similarity(text,text)
функцией.
Проблема в том, что я должен заказать им сумму всех сходств, найденных для каждого слова в User.name
. Так что, если имя пользователя "A B C"
, то ее оценка должна быть:
similarity('search_text','A') + similarity('search_text','B') + similarity('search_text','C')
Так что мне нужно, чтобы отобразить имя пользователя слов баллов, а затем сумму (уменьшить) их. Как я могу это сделать в postgres?