Фильтр поиска — только темы / только сообщения

Хотя я понимаю, что обычный поиск по темам и сообщениям может быть достаточным для большинства случаев, я получил от пользователей запросы на возможность фильтрации результатов, чтобы отображать только ответы или только темы (что, как я полагаю, означает первые ответы в теме).

Вероятно, это также можно реализовать с помощью компонента темы, но я решил сначала спросить, вдруг я упускаю что-то очевидное.

Спасибо.

1 лайк

В настоящее время вы можете искать по всем темам и сообщениям

Вы имеете в виду, что хотите эту функциональность, исключая результаты поиска по заголовкам тем?

1 лайк

Вы изучили возможности расширенного поиска для фильтрации?

Я знаю, что поиск по темам и сообщениям возможен. Сообщается, что результаты смешивают темы и сообщения, и было бы неплохо иметь возможность указать Discourse показывать «только темы» ИЛИ «только сообщения», а также оба варианта (как сейчас).

Поскольку результаты представлены в интерфейсе с бесконечной прокруткой, возможность фильтровать то, что пользователь уже знает, что там не будет, помогла бы снизить информационный шум.

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

Надеюсь, теперь всё понятно.

1 лайк

В Discourse «тема» означает все сообщения. Первое сообщение — это оригинальное сообщение (OP) или первое сообщение.

Однако я понимаю, что это может сбивать с толку, так как кнопка New Topic создаёт тему, состоящую изначально из одного сообщения, а затем добавляются новые сообщения при появлении ответов.

Тем не менее,

означает «только первое сообщение темы», и это действительно доступно: это фильтр in:first:

Поиск во всех сообщениях, кроме первых, невозможен, и на данный момент нет оператора для исключения термина, фильтра, категории или чего-либо ещё.

2 лайка

Спасибо за уточнение, @Canapin.

Спасибо за спецификацию о том, что возвращаются только темы. Я это полностью упустил :blush:

Как временное решение: когда результаты поиска возвращают фактические данные, формируется URL. Как вы думаете, можно ли создать компонент или плагин, который просто добавляет style="display:none" к тем элементам, URL которых указывает на пост, и наоборот — для тем?

В случае с плагином где-то в результатах поиска должна быть функция, определяющая, является ли элемент «первым ответом» или нет. Возможно, получится перехватить это и исключить такие элементы из массива результатов, добавив специальный новый фильтр?

Если вы знаете, в каком файле находится этот контроллер или модель, пожалуйста, дайте ссылку здесь, чтобы я тоже мог посмотреть :slight_smile:

1 лайк

Для меня это неведомый, странный и пугающий мир, но, судя по коду, контроллер находится здесь:

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

Вам также может быть интересно посмотреть, как Discourse Assign добавляет фильтр в поиск:

2 лайка

Спасибо, @Canapin. Я вернусь к этому через пару недель, так как сейчас сильно завален работой и просто собираю информацию о том, чем смогу заняться, когда у меня появится немного свободного времени :slight_smile:

1 лайк