Поиск «Перейти к существующей теме» беззвучно не работает, в то время как поиск по сайту функционирует

Привет,

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

  • Ввод текста в поле Поиск темы не уточняет результаты
  • Сетевые запросы возвращают 200 с правильными параметрами
  • В консоли браузера нет ошибок JS
  • Общий поиск по сайту /search работает как ожидалось
  • Проблема сохраняется даже после пересборки

Пример выполняемого запроса:
/search/query?term=Eve Park&type_filter=topic&search_for_id=true&restrict_to_archetype=regular

Список выбора остаётся статичным набором тем и не меняется при изменении параметра term.


После отладки на стороне клиента я сначала предположил, что это может быть связано с отсутствием расширения pg_trgm в Postgres, но хотел подтвердить это перед дальнейшими действиями.

Я выполнил следующие команды:

./launcher enter app
rails c
ActiveRecord::Base.connection.execute(
  "SELECT extname FROM pg_extension WHERE extname = 'pg_trgm';"
).to_a

Такая диагностика была бы верной, если бы команда вернула:

[]

Однако вместо этого она вернула:

[{"extname"=>"pg_trgm"}]

Таким образом, pg_trgm включён, и это, похоже, не является корневой причиной.


Поэтому я планирую выполнить следующую команду:

./launcher enter app
rake search:reindex

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


Сбивает с толку следующее:

  • Discourse в остальном продолжает работать нормально
  • Полный поиск /search работает как ожидалось
  • Автодополнение при перемещении темы тихо деградирует вместо того, чтобы выдавать предупреждение

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

Поскольку эта настройка влияет только на ранжирование в полном поиске /search, а не на конечную точку выбора темы, это согласуется с тем, что проблема специфична для /search/query, а не связана с общей производительностью поиска.


Перед запуском rake search:reindex я хотел перепроверить обоснование:

Выбор темы при перемещении использует /search/query с параметром search_for_id=true, который опирается на индексированные запросы более напрямую, чем конечная точка полного поиска /search. Поэтому частично устаревший или несогласованный поисковый индекс может влиять на выбор темы, даже если полный поиск продолжает работать.

Учитывая, что:

  • конечная точка вызывается,
  • ответы возвращают 200,
  • pg_trgm включён,
  • и переключение настройки «Предпочитатьать недавние посты в поиске» не даёт эффекта,

Полный запуск rake search:reindex кажется следующим логичным шагом для исключения несогласованности индекса. Отдельно стоит отметить, что отсутствие каких-либо предупреждений или обратной связи делает это особенно запутанным с точки зрения UX администратора.

1 лайк

По моему опыту, этот поиск никогда не был надёжным. Например, есть ещё вот этот отчёт: Topic can't be found when searching for a topic (verbatim) when moving a post.
Обычно я ввожу ID темы и использую поиск на сайте, чтобы найти её.

1 лайк

Спасибо — это полезный контекст, и связанный отчёт выглядит очень похожим.

Странность в моём случае заключается в том, что оно действительно вело себя «как не отвечающее», когда я писал исходный пост: /search/query вызывался с term=Eve Park и т.д. (ответы 200), но список выбора оставался статичным и никак не уточнялся.

С тех пор я теперь могу воспроизвести ожидаемое поведение «отзывчивого поиска» (как показано в моей записи в безопасном режиме) бок о бок с другим окном браузера.

Я ничего не менял на сервере помимо того, что описал в исходном посте, поэтому моя текущая гипотеза состоит в том, что изначально я столкнулся либо с:

  • проблемой состояния на стороне клиента (кэшированные ресурсы / разница при жёстком обновлении / взаимодействие компонентов темы),
  • или с пограничным случаем запроса, когда определённые термины не возвращаются как ожидалось (дословный поиск / знаки препинания / стоп-слова / порядок), аналогично отчёту о «дословном перемещении поиска, который не может найти тему», на который вы ссылаетесь.

Далее я собираюсь сравнить фактический JSON-ответ от /search/query между «неотзывчивым» случаем и «отзывчивым» случаем (тот же термин), а также снова запущу безопасный режим с темами и без них, чтобы проверить корреляцию.

Если кто-то знает точные правила сопоставления, используемые выбором перемещения темы (в отличие от полного /search), или где они отличаются, это было бы очень полезно — я пытаюсь выяснить, является ли это известным ограничением/пограничным случаем или регрессией.