Полезные советы

Урок 283 из 293
Автор: Татьяна Старкова
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
3 из 5
Просмотров: 49563
Дата изменения: 18.07.2023
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Ограничений нет

Знаете ли вы, что эффективность полнотекстового поиска можно значительно увеличить, если исключить из индекса слова встречающиеся очень часто? Например, если в каждом сообщении на форуме встречается слово "привет", то поиск по этому слову выдаст все сообщения, что не может удовлетворить инициатора такого запроса. Такие слова называются "СТОП" словами.

Практика показывает, что при использовании списка стоп-слов размер индекса уменьшается примерно на 10-15%, а возможный прирост скорости поиска бывает в десятки раз (20-50).

Задача по увеличению эффективности полнотекстового поиска решается в 3 этапа.

Этап 1. Определение наиболее "популярных" слов

Чтобы определить стоп-слова, выполните следующее:

  • Перейдите на страницу SQL запрос (Настройки > Инструменты > SQL запрос).
  • Выполните запрос:
    select ss.STEM,count(*) from b_search_content_stem cs inner join b_search_stem ss on ss.ID = cs.STEM group by STEM order by count(*) desc limit 100

    Примечание: до 11-й версии модуля необходимо использовать другой запрос:
    select STEM,count(*) from b_search_content_stem group by STEM order by count(*) desc limit 100

    В результате на странице будут отражены 100 самых популярных терминов на сайте.

    Внимание! Этот запрос может быть очень "тяжелым". Не торопитесь и выполните его во время наименьшей нагрузки на сайт. А если вдруг есть актуальная резервная копия на тестовом сайте, то лучше выполнить запрос на ней.

Есть и немного другой вариант получения списка стоп-слов:

  • Создайте страницу со следующим содержимым:
    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $query = $DB->Query("select ss.STEM,count(*) from b_search_content_stem cs inner join b_search_stem ss on ss.ID = cs.STEM group by STEM order by count(*) desc limit 100");
    while($ar = $query->Fetch())
       echo " ,",$ar["STEM"];
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
    ?>
    

    Так, вы быстро скопируете список самых популярных слов.

    Внимание: Обязательно удалите эту страницу после ее выполнения!

Этап 2. Исключение слов из полнотекстового индекса

Для исключения слов из полнотекстового индекса и поисковых запросов добавьте в init.php через запятую слова, которые необходимо исключить:

define("STEMMING_STOP_RU", "ЗДЕСЬ, СПИСОК, СТОП, СЛОВ"); 
Примечание: Система поддерживает стемминг 2-х языков: русского и английского. Для первого обрабатывается константа STEMMING_STOP_RU, для второго - STEMMING_STOP_EN.

Этап 3. Переиндексация

После внесенных изменений выполните полную переиндексацию для обновления поискового индекса. Используйте форму Переиндексация сайта (Настройки > Поиск > Переиндексация).

Примечание: подробнее про индексацию читайте в уроке Индексация.

Обратите внимание:

  • Наиболее эффективным будет удаление/установка модуля поиска без сохранения таблиц.
  • Начиная с версии форума 5.9.3, у модуля появилась настройка, значительно ускоряющая переиндексацию - Количество документов, переиндексируемых за шаг. Разумное значение 2-3 тысячи.
  • По окончании переиндексации обязательно выполните оптимизацию БД на странице Проверка/восстановление таблиц (Настройки > Инструменты > Диагностика > Оптимизация БД).


Нам жаль это слышать… Но мы постараемся быть лучше!

Мы благодарны Вам за помощь в улучшении документации.

Спасибо, мы рады что смогли помочь Вам. Ниже Вы можете оставить свой отзыв или пожелание :)
Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас
Курсы разработаны в компании «1С-Битрикс»