Результаты поиска должны отдавать приоритет первому сообщению в теме, если заголовок совпадает с поисковым запросом

Так что абсолютно нет способа определить в поисковом индексе, является ли пост первым?

А как насчет такого изменения:

Когда несколько постов в теме соответствуют заданному поисковому термину, И ОДИН ИЗ НИХ ЯВЛЯЕТСЯ ПЕРВЫМ ПОСТОМ, дать этому конкретному посту, то есть первому посту, огромный буст в поисковом рейтинге.

Тогда вы избежите бессмысленного поведения «сортировка по номеру поста», одновременно правильно отдав приоритет первому посту?

2 лайка

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

2 лайка

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

  • Пользователи могут использовать поиск как закладки и путаться, когда поиск, который всегда приводил их к #77, теперь ведёт к #892.

  • Это всё равно что подливать масла в огонь: у нас нет механизма «перейти к первому непрочитанному сообщению в теме», поэтому приоритет более поздних постов создаёт серьёзный риск: выше вероятность появления пробелов в чтении (например, вы прочитали 1, 2, 3, но пропустили 4–88… а теперь дошли до 89).

Я гораздо больше предпочитаю безоговорочно отдавать приоритет первому сообщению в теме: это проще объяснить и гораздо стабильнее.

5 лайков

Согласен, такое решение меня устраивает :+1:

4 лайка

Используем ли мы ранжирование первого результата или ранжирование лучшего поста в теме? Раньше мы использовали второе, что кажется неверным, так как мы брали ранжирование поста, который не появится в результатах поиска, и сравнивали его с постами других тем.

3 лайка

Я бы сказал, что мы ссылаемся на MIN(post_number) и ранжируем по MAX(rank) при выполнении агрегации.

3 лайка

Новое поведение было отменено в

5 лайков

Эта тема была автоматически закрыта через 6 дней. Новые ответы больше не принимаются.

Спасибо за повторное открытие темы. Я считаю, что проблема всё ещё существует. На https://community.wanikani.com есть тема под названием «General Anime Thread». Если я ищу «general anime», эта тема появляется первым результатом, но ссылка ведёт на сообщение 511. Особенно странно то, что в этом сообщении даже нет слов «general» или «anime». Получается, что ситуация даже хуже, чем изначально сообщалось. Насколько я могу судить, https://community.wanikani.com должна работать на версии после внедрения этого исправления.

В качестве второго примера: если я ищу «japanese book club», я попадаю на сообщение 925 этой темы, хотя поисковый запрос содержится в заголовке самой темы.

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

4 лайка

Вы проверяли версию, просмотрев исходный код? Если вы не можете воспроизвести проблему здесь, скорее всего, это несоответствие версий.

1 лайк

Это из исходного кода страницы:

Discourse 2.7.0.beta4 - https://github.com/discourse/discourse version 47835ade9a3dcebb14bdd744e92d93b9c9199b90

Этот коммит был сделан два дня назад, и я всё ещё могу воспроизвести эту проблему с примерами из моего последнего сообщения.

3 лайка

Спасибо за очень подробный отчет, @tgxworld быстро посмотрит!

4 лайка

@sam Я понимаю, о чём речь. У нас есть оптимизация производительности поиска на крупных сайтах, при которой осуществляется поиск только по частичному индексу. Поскольку первый пост очень старый, он не включён в частичный индекс, поэтому мы не ссылаемся на него. Мне нужно подумать над решением этой проблемы, так как имеющиеся у меня варианты либо жертвуют точностью ради производительности, либо производительностью ради точности.

3 лайка

Будет ли разумным (с точки зрения компромисса в производительности) включить в индекс первые посты всех тем? Или, возможно, только первые посты тех тем, у которых есть посты в оптимизированном временном диапазоне? При условии, что последнее вообще реализуемо с точки зрения базы данных.

3 лайка

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

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

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

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

Одно временное изменение, которое мы, вероятно, можем себе позволить для вашего форума, — это удвоение размера недавнего индекса. Это настраивается (@tgxworld, возможно, стоит это реализовать).

4 лайка

Спасибо! Если вы считаете, что это безопасно, это было бы замечательно!

3 лайка

Было ли это когда-либо сделано? Поиск ранее упомянутой темы теперь ведёт к посту 523 вместо 511, что, по-видимому, указывает на то, что всё больше и больше постов выходят за пределы диапазона индекса.

2 лайка

Привет, Шон, извини, что этот вопрос не был поднят.

Я только что изменил параметр (SiteSetting.search_recent_posts_size) на 250 000, у вас всего 163 000 тем. Изменения вступят в силу через пару дней, так как должно выполниться запланированное задание.

4 лайка

Я считаю, что изменения уже вступили в силу. Ранее я установил значение в 1 миллион, но забыл опубликовать обновление здесь.

@sam Планируем ли мы решить эту проблему в будущем? Включение всех первых постов в частичный индекс кажется разумным компромиссом. Из предыдущих обсуждений я знаю, что @codinghorror считает, что поиск должен в первую очередь приоритизировать темы, прежде чем показывать сообщения внутри темы.

3 лайка