Функция поиска возвращает приблизительные результаты?

Привет.

Я искал эту тему на моём форуме: les passants - Autour d'une roue - Monocycle.info

Название темы — «les passants».

Раньше поиск по запросу «passants in:title» возвращал эту тему среди первых результатов.

Но теперь он показывает приблизительные результаты:

Вместо «passants» вы видите «passe», «pass», «passage», «passion» — некоторые из этих слов появляются даже раньше точного совпадения «passants»…

Думаю, это ошибка?

Боюсь, я недостаточно хорошо знаю работу поиска, чтобы сказать, сделано ли это намеренно, но вы можете заключить слово в двойные кавычки, чтобы выполнить точный поиск, если это поможет?

Например, "passants"

Résultats de recherche pour « "passants" in:title » - Monocycle.info

1 лайк

Это, безусловно, помогает, но поведение по умолчанию вызывает недоумение.

По неизвестной причине при поиске точной строки в кавычках также возвращается результат, в заголовке которого нет слова «passants» (но оно есть в содержимом первого сообщения):

1 лайк

Во французском языке слово passants приводится к лексеме pass до того, как мы выполняем поиск по содержимому постов.

Лексема — это строка, как и токен, но она нормализована, поэтому различные формы одного и того же слова приводятся к единому виду.

4 лайка

Понял.

Лексемы связаны с языком?

Мне кажется, во французском нет особого смысла сводить такое слово к «pass». :thinking: Это скорее запутывает, чем помогает, учитывая, что существует множество слов, начинающихся с «pass», но не связанных (ни прямо, ни косвенно) с глаголом «passer».

Но если мы можем точно указать нужную строку в двойных кавычках, это сработает :slight_smile:.

Кстати, почему во втором результате в заголовке нет слова «passants», несмотря на то что в моём последнем скриншоте я использовал двойные кавычки?

В Postgres это настраивается, но именно французская реализация в Postgres сводит всё к следующему:

discourse_development=# select to_tsvector('french', 'passants');
 to_tsvector
-------------
 'pass':1
(1 row)

discourse_development=# select to_tsvector('english', 'passants');
 to_tsvector
-------------
 'passant':1
(1 row)

Существуют более продвинутые словари, которые можно использовать, но их настройка крайне сложна.

3 лайка