@rraderio

Как сделать более весомее колонки в PostreSQL при поиске?

В Elasticsearch я могу сделать так

GET /_search
{
  "query": {
    "multi_match" : {
      "query" : "this is a test",
      "fields" : [ "subject^3", "message" ] 
    }
  }
}


Мы ищем "this is a test" в 2-х полях/колонках: subject, message. Поле subject в три раза более весомее чем поле message.

Как добиться того же с PostgreSQL?
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 2
@miksir
IT
Вы, надеюсь, про FTS в PostgreSQL? Тогда, скорее всего ответ содержится тут https://www.postgresql.org/docs/9.5/static/textsea...

Создание индекса
UPDATE  table SET ftsindex = 
setweight(to_tsvector(coalesce(subject,'')), 'A') ||
setweight(to_tsvector(coalesce(message,'')), 'D');


При создания индекса разным полям можно назначить условный вес, от A до D.
При запросе, условному весу можно указать реальный

SELECT id, ts_rank_cd({1.0, 1.0, 1.0, 3.0}, ftsindex, query) AS rank
FROM table, to_tsquery('this is a test') query
WHERE query @@ ftsindex
ORDER BY rank DESC
LIMIT 10;
Ответ написан
freeExec
@freeExec
Участник OpenStreetMap
SELECT * FROM
(SELECT id, 3 AS rank FROM mail WHERE subject like '%query%'
UNION ALL
SELECT id, 1 AS rank FROM mail WHERE message like '%query%') AS t
ORDER BY rank DESC
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы