Как настроить поиск только по точным совпадениям?

Я заметил, что при некоторых поисковых запросах результатов нет:

Однако, если сузить поиск, например, до конкретной темы, то нужный результат находится:

Сначала я подумал, что это связано с буквами с диакритическими знаками, но я провел несколько тестов, и то же самое происходит и с буквами без диакритики.

Вторая мысль была, что это может быть связано со стоп-словами, но я изменил файл app.yml, чтобы обрезать словарь стоп-слов испанского языка:

ls -l /usr/share/postgresql/13/tsearch_data/spanish.stop
-rw-r--r-- 1 root root 0 May 12 06:37 /usr/share/postgresql/13/tsearch_data/spanish.stop
                       ☝️

Есть ли какие-то настройки, которые я мог бы изменить, чтобы гарантировать, что точные совпадения всегда будут находить?

Привет, @Nacho_Caballero!

Можешь предоставить пример текста и поисковый запрос, которые воспроизводят проблему? Я вижу это на изображении, но видно только фрагмент.

Спасибо, Алан.

Вот содержимое того конкретного сообщения:

Действительно, после «pienso que» это не используется, потому что то, что вы утверждаете, что думаете, является реальностью, а не возможностью.

С другой стороны, мы используем сослагательное наклонение, когда применяем эту же конструкцию, но в отрицательной форме: «No pienso que haya mucha gente en el mercado hoy».

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

С уважением! :smiley:

Однако, чтобы воспроизвести это поведение здесь, вам пришлось бы установить локаль на испанский и урезать словарь :sweat_smile:

Я тестировал это на локальном тестовом сайте Discourse, который у меня запущен, но не смог воспроизвести проблему. Думаю, это связано с тем, что сайт практически пуст. Я считаю, что эта проблема возникает только при наличии большого количества сообщений (у меня сейчас около 68 тысяч).

Я мог бы попробовать другие варианты, связанные со словарем PostgreSQL, но не уверен, как войти в мой образ Docker при запуске тестовой установки. Есть ли аналог команды launcher enter app?

В идеале должен быть способ игнорировать стоп-слова. Например, искать это предложение в вашем сообщении:

@Nacho_Caballero, привет! Можешь, пожалуйста, подсказать, какой сейчас алгоритм поиска использует Discourse? Это поможет мне разобраться с проблемой.

Спасибо, Яши.

Я предполагаю, что Discourse использует стандартный алгоритм полнотекстового поиска Postgres. Мне кажется, что единственный способ обеспечить точное совпадение при использовании кавычек (без стемминга и без игнорирования стоп-слов) — это использование простого словаря :thinking:

Спасибо, @Nacho_Caballero.

Я изучу алгоритм полнотекстового поиска в Postgres.

Возможно ли выполнить поиск по точному совпадению?

Пример:

В данный момент поиск по запросу «flow» к сожалению возвращает «flower» как наиболее релевантный результат..

Попробуйте использовать кавычки при поиске, например, ищите «flow», а не flow.