Поиск с пунктуацией работает нестабильно

Например, поиск it, it:, “it, it:”, “it, it:”,, "it, it:", или it, it:”. Он не находит этот пост, хотя в нём действительно есть «it, it:».[1]

Кроме того, при нажатии кнопки поиска кавычки “” заменяются на "". Мне не нравится такой пользовательский опыт, не знаю, является ли это ошибкой.

Платформа: Edge на Android, try.discourse.org, воспроизводится в безопасном режиме


  1. На случай, если он будет автоматически удалён: содержимое тестового поста: It, “it, it:”, it, oandnxkwbs. ↩︎

Я думаю, что it — это стоп-слово, которое исключается из поиска. Вы пробовали воспроизвести проблему со словом, которого нет в этом списке, чтобы убедиться, что дело действительно в пунктуации?
Are specific terms ignored from searches? - #5 by codinghorror

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

На самом деле, я думаю, что смогу воспроизвести проблему снова. Попробуйте найти этот пост, введя в поиске we don't.

А поиск по запросу “just-use-interface{}/object; we don’t need generics” или "just-use- interface{} / object ; we don't need generics" не находит его.

Но поиск по запросу just-use- interface{} / object ; we don't need generics находит его.

Да, это верно… вы вообще не можете искать по it… если вы попробуете это здесь, вы не получите результатов. Слова, которые, вероятно, встречаются огромное количество раз (I, the, a, местоимения и т. д.), исключаются из индекса, потому что они появляются слишком часто, чтобы обеспечивать осмысленное различение.

здесь то же самое, we и don't (технически don и t) не индексируются

эта ситуация немного иная… для:

"just-use- interface{} / object ; we don't need generics"

это никогда не сработает, кавычки требуют точного совпадения, а пробелы делают его неточным

в случае поиска:

"just-use-interface{}/object; we don't need generics"

исходный текст поста содержит кавычки в стиле «fancy quote» (don’t), но поиск удаляет их, поэтому вы никогда не сможете получить точное совпадение для одного из них… это означает, что посты и поиск не являются точно симметричными, что, возможно, можно было бы улучшить

это происходит потому, что без кавычек вокруг него вы не ищете точное совпадение, поэтому система подбирает термины “interface”, “object”, “need”, “generics”, и этот пост является лучшим совпадением для этих терминов

Мне было очень трудно находить нужные темы, даже по простым словам. Эта функция упоминалась ранее, и несколько лет назад проводился эксперимент по интеграции с Typesense.

Я wondered, есть ли реальные планы по улучшению функции поиска в Discourse? Это один из самых часто используемых инструментов, и, на мой взгляд, ему нужен рефакторинг и немного внимания.

Может, добавить опцию «поиск в обычном тексте»? Она отключает всякие подводные камни, вроде кавычек "".

И я не могу не задаться вопросом: есть ли техническая причина, по которой слова «we» и «don’t» (включая вариант с дефисом «don, t») исключаются из индексации для поиска? Неужели они слишком распространены?

да, именно так

Стоп-слова — это очень распространённые слова, которые встречаются практически в каждом документе и не несут дискриминирующей ценности. Поэтому в контексте полнотекстового поиска их можно игнорировать. Например, в каждом английском тексте присутствуют такие слова, как a и the, поэтому их бесполезно хранить в индексе.

PostgreSQL: Documentation: 18: 12.6. Dictionaries