Можно ли ранжировать частичные совпадения в полнотекстовом поиске Postgres? - PullRequest
4 голосов
/ 21 февраля 2010

Я пытаюсь вычислить ts_rank для полнотекстового соответствия, где некоторые термины в запросе могут не совпадать с ts_vector, с которым сопоставляется. Я хотел бы, чтобы ранг был выше в матче, где больше слов совпадают. Кажется довольно просто?

Поскольку не все термины должны совпадать, мне нужно | операндов, чтобы дать запрос, такой как to_tsquery('one|two|three') (если бы это было &, все должны были бы совпадать).

Проблема в том, что значение ранга кажется одинаковым независимо от того, сколько слов совпадают. Другими словами, это увеличение, а не умножение предложений.

select ts_rank('one two three'::tsvector, to_tsquery('one')); дает 0.0607927.

select ts_rank('one two three'::tsvector, to_tsquery('one|two|three|four')); дает ожидаемое нижнее значение 0.0455945, потому что 'four' не является вектором.

Но select ts_rank('one two three'::tsvector, to_tsquery('one|two'));

дает 0.0607927 и аналогично

select ts_rank('one two three'::tsvector, to_tsquery('one|two|three'));

т 0.0607927

Я бы хотел, чтобы результат ts_rank был выше, если больше терминов совпадают.

возможно?

Чтобы противостоять одному возможному ответу: я не могу вычислить все возможные подпоследовательности поискового запроса как пересечения, а затем объединить их все в запросе, потому что я собираюсь работать с большими запросами. Я уверен, что есть много аргументов против этого в любом случае!

Редактировать: Мне известно о ts_rank_cd, но это не решает вышеуказанную проблему.

Ответы [ 2 ]

3 голосов
/ 29 июля 2014

Используйте расширение smlar (только для Linux, AFAIK, написанное теми же парнями, которые принесли нам текстовый поиск).

Имеет функции для вычисления TFIDF, косинуса или сходства перекрытий между массивами. Он поддерживает индексацию так быстро.

Другим способом было бы «проверить орфографию» запроса перед его использованием, в основном удалив любые термины запроса, которых нет в вашем корпусе.

2 голосов
/ 24 марта 2010

Я пришел к выводу & пунктов вместе для рейтинга. В моем запросе выбора (с помощью которого я делаю поиск) элементы | ed. Это похоже на работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...