Просмотров: 8764 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 12.01.2015

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

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

Рассмотрим 3 этапа решения поставленной задачи:
  • Определение наиболее "популярных" слов
  • Исключение слов из полнотекстового индекса
  • Переиндексация
  • Определение наиболее "популярных" слов

    Первое, что необходимо сделать - это определить СТОП слова, для этого выполните следующее:

    • Перейдите на страницу SQL запрос (Настройки > Инструменты > SQL запрос)
    • Выполните следующий запрос:

      select STEM,count(*) from b_search_content_stem group by STEM order by count(*) desc limit 100

      Примечание: Начиная с 11-й версии модуля необходимо использовать другой запрос:
      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

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

      SQL запрос 100 самых популярных терминов на сайте

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


    Как вариант можно создать страницу со следующим содержимым:

    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $query = $DB->Query("select STEM,count(*) from b_search_content_stem group by STEM order by count(*) desc limit 100");
    while($ar = $query->Fetch())
       echo " ,",$ar["STEM"];
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
    ?>
    

    Это позволит быстро скопировать список самых популярных слов.

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

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

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

    Переиндексация

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

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

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

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


    36


    Курсы разработаны в компании «1С-Битрикс»