Поиск

Доступность Поиска на портале

Поле “Поиск” расположено на всех внутренних страницах портала, кроме:

  • Страницы прохождения диалога.

  • Страницы прохождения теста.

Страница поиска

Переход на страницу поиска возможен как уже с введенным поисковым запросом, так и с пустым. Для перехода на пустую страницу поиска нажмите на кнопку “Найти” не вводя значений в поисковую строку.

Поисковая выдача

Поиск осуществляется после нажатия на кнопку поиска или выбора одного из значений в списке подсказок.

В поисковой выдаче выводятся все материалы, в которых встречаются введённые пользователем символы.

Результат поиска можно фильтровать. Как это делать – рассказано в разделе Фильтрация

Если по введённому запросу материалов нет – выводится заглушка.

Принцип формирования стандартной поисковой выдачи

  • Если поисковая фраза полностью совпала с каким-либо полем (например, по запросу "Иванов" есть совпадающий результат в таблице фамилий юзеров), то начисляется 4 балла.

  • Если поле начинается с поисковой фразы, но содержит в себе дополнительный текст (запрос “Привет” был найден в посте Пульса с содержанием “Привет ребята, меня завут Маша”), то начисляется 3 балла

  • В случае, если поисковая фраза находится в середине поля (запрос “словарь” нашелся в названии урока “Учимся составлять словарь терминов”), то начисляется 2 балла.

  • И если же, поле заканчивается поисковой фразой, то начисляется 1 балл.

  • Если попаданий нет, то баллы не начисляются.

  • Баллы суммируются по полям, которые участвуют в поиске, это значит, что при запросе "Иван" пользователь Иван Иванов наберет 8 баллов и будет более релевантным, чем пользователь Иван Петров, который наберет 4 балла.

  • Выдача происходит с сортировкой по количеству набранных баллов.

Если на платформе используются признаки видимости для ограничения видимости пользователей друг другу, то они влияют на поисковую выдачу и при использовании стандартного поиска Мотивити, и при — OpenSearch.

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

Подробнее о влиянии признаков видимости на поиск в https://motivityy.atlassian.net/wiki/spaces/Documentation/pages/203849749#%D0%9F%D0%BE%D0%B8%D1%81%D0%BA

Пагинация

  • Пользователю изначально на странице для каждой вкладки отображается максимум 20 результатов

  • Если результатов больше 20, то пользователю доступна кнопка “Загрузить еще N записей“, N - количество скрытых найденных записей. При нажатии на кнопку на странице загружаются еще N записей, но не больше 20.

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

Сортировка

Найденные материалы разбиты по категориям.

Фильтрация

Список выведенных материалов можно фильтровать с помощью тегов. Фильтрация работает по логике И, то есть материал должен иметь все выбранные теги, иначе он не отобразится после фильтрации.

Если количество используемых тегов больше 40, то в блоке “Фильтр по тегам” появляется кнопка пагинации. Она позволяет вывести остальные теги.

Фильтры можно сбрасывать по одному, а можно сразу все – для этого нужно нажать кнопку “Сбросить фильтры”.

Поиск по тегам

Теги можно использовать не только для фильтрации, но и для поиска по ним.
Без поискового запроса выводятся все материалы с выбранными тегами. Выбор материалов по тегам тоже осуществляется по логике И.

История поиска

По нажатию на строку поиска под полем могут выводится предыдущие запросы. Выводится не больше 5. Если нажать на один из вариантов поиск сработает автоматически.

Запросы можно удалять из истории поиска.

OpenSearch

Важно: на текущий момент поддержка Elasticsearch для SaaS (облачной инфраструктуры) прекращена (подробнее см. https://yandex.cloud/ru/blog/posts/2023/06/managed-elasticsearch), поэтому мы сменили сервис для поиска с Elasticsearch на OpenSearch. Для клиентов, у которых платформа расположена в закрытом контуре, поисковая система Elasticsearch может быть развернута и мы продолжаем ее поддержку, если она уже развернута, несмотря на то, что сами работаем только с OpenSearch

Что такое OpenSearch

OpenSearch (далее “OS”) – это легко масштабируемая система поисковых и аналитических инструментов с открытым исходным кодом.

Как работает OS

Основное отличие для работы с текстовыми документами является анализатор - цепочка последовательных обработчиков текста.

Сам анализатор состоит из: фильтров символов , токенизатора (может быть только один) и фильтров токенов.

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

  • Если пользователь в строке поиска задает слово, то в результате поиска система должна выдавать ответы:

    • Содержащие исходное слово целиком

    • Содержащие слова, образованные от искомого слова (ищем по “бэклог”, находим также “бэклоги”, “бэклогу” и т.п.)

  • Если пользователь в строке поиска задает словосочетание, то в результате поиска система должна выдавать ответы:

    • Содержащие исходное словосочетание целиком

    • Содержащие словосочетания, образованные от искомого (ищем по “задачи бэклога”, находим также “задачи из бэклога”, “задача в бэклоге”, “бэклог с задачей” и т.п.)

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

Cводка по используемым фильтрам:

  • lowercase - изменяет текст токена на нижний регистр (например, ХОРОШИЙ день меняется на хороший день)

  • russian_stop - игнорирует определённые слова, которые засоряют поиск (список слов тут)

  • russian_stemmer - нахождение основы слова для заданного исходного слова (алгоритм работы можно почитать тут https://snowballstem.org/algorithms/russian/stemmer.html)

  • hunspell - игнорирует орфографические ошибки в русском или английском тексте

  • en_to_ru_char_filter - исправляет ошибки раскладки (например, заменяет “rfr yfqnb” на “как найти“)

  • html_strip - удаляет элементы HTML из текста и заменяет объекты HTML их декодированным значением (например, заменяет &на &)

Преимущества OS

  • OS позволяет качественно и быстро обрабатывать текст, в том числе при частичном и полнотекстовом вводе запроса. Как это работает: вы ввели запрос, и система поиска начинает анализировать все страницы без исключения, а не ищет абсолютно точное совпадение с запросом. 

  • При ошибке раскладки (например, “rfr yfqnb” вместо “как найти“), поиск все еще понимает, что требуется найти, то есть меняет запрос на кириллическую раскладку и происходит поиск будто запрос происходил на русском языке

  • OS легко масштабируется и обладает высокой отказоустойчивостью. Когда речь идет о больших объемах данных, многие поисковые системы не справляются, возникает вопрос масштабирования. В OS архитектура устроена горизонтальным образом, поэтому ему можно «на лету» добавлять мощность, а сервис сам перераспределит нагрузку.

  • Распределенная система OS позволяет параллельно обрабатывать большие объемы данных, мгновенно подбирая наилучшее соответствие к запросу.

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

  • Возможен поиск внутри документа и по названию документов. Для этого добавлена возможность загружать в контейнер OpenSearch файлы в форматах pdf для их обработки и поиска по ним.
    В данный момент невозможно учесть ограничения по модулю и доступу к записи, т.е. пользователю в результатах поиска выводятся файлы, которые ему недоступны

    В результатах поиска выводится:

    • Название модуля

    • Иконка pdf + название файла со ссылкой на открытие

    • Цитата из файла, по которой найдено совпадение

Варианты подключения OS

Существует несколько вариантов как можно подключить к платформе OS:

  • Платформа расположена на серверах motivity – в данном случае подключение и использование OS абсолютно бесплатно. Если в опросном листе проставлена галочка OS, то поиск будет подключен сразу. Если платформа уже развернута, то надо обратиться к саппорту, и он подключит вам OS.

  • Платформа расположена в закрытом контуре – тогда для подключения необходимо развернуть собственный сервер для использования нового поиска, при этом мы можем помочь в разворачивании контейнера как OpenSearch так и Elasticsearch, несмотря на то, что сами работаем только с OpenSearch

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

Какие данные передаются в OS

Возникает логичный вопрос – какие данные передаются в OS? Как они защищены? На наш сервер будут попадать данные, которые сейчас участвуют в поиске: фио и email (для поиска по пользователям), заголовки, текст и краткое описание (для поиска по сущностям). Данные разграничены индексами OS, которые будут уникальны и завязаны на логин и пароль, у пользователей не будет возможности узнать данные других пользователей.

Включение OS на платформе

Функционал поиска OpenSearch включается в ПА на странице НастройкиНастройки поиска, для этого на вкладке Настройки требуется активировать соответствующий чек-бокс, а также заполнить поля Хост, Порт, Имя пользователя и Пароль (данные для заполнения полей необходимо запросить у технической поддержки)

После сохранения настроек подключения, требуется перейти на вкладку Данные Elasticsearch/OpenSearch и выполнить обновление, нажав на соответствующую кнопку

В случае если дополнительный функционал поиска отключен или сервер с ним недоступен, на вкладке Данные Elasticsearch/OpenSearch будет показано соответствующее сообщение