Позвольте мне прояснить это утверждение. Для точных совпадений ранжирование результатов не требуется, так как либо совпадение есть, либо его нет. Что касается совпадений по частичному вхождению, как мы решим, какие результаты должны занимать более высокие позиции?
- Это мой поисковый запрос
- Поисковый запрос интересен
- Поисковый запрос здесь более интересен, так как заголовок длиннее
Все вышеперечисленные заголовки содержат поисковый запрос, поэтому вопрос в том, как ранжировать результаты. В настоящее время мы полагаемся на функцию ранжирования Postgres, которая делает это за нас.
Попытки ранжирования направлены на оценку релевантности документов конкретному запросу, чтобы при наличии множества совпадений наиболее релевантные отображались первыми. PostgreSQL предоставляет две встроенные функции ранжирования, которые учитывают лексическую информацию, близость терминов и структуру документа; то есть они принимают во внимание, как часто термины запроса встречаются в документе, насколько близко они расположены друг к другу и насколько важна часть документа, в которой они находятся. Однако понятие релевантности размыто и сильно зависит от конкретного приложения. Различные приложения могут требовать дополнительной информации для ранжирования, например, дату изменения документа. Встроенные функции ранжирования являются лишь примерами. Вы можете написать свои собственные функции ранжирования и/или комбинировать их результаты с дополнительными факторами, чтобы удовлетворить ваши специфические потребности.
Postgres учитывает множество факторов, но в конечном итоге ранжирование остаётся несколько нечётким и действительно зависит от конкретного сайта, в зависимости от того, как структурировано содержание форума. Наша цель в Discourse — предоставить хорошее решение по умолчанию, которое подойдёт для большинства форумов.