Индексация

25 декабря 2015, 06:39

Страница для создания поискового индекса.

Построение индекса — это тяжелая операция, поэтому она разбивается на множество запросов, которые отправляются через Ajax в цикле.

Вы можете указать, по сколько ресурсов за раз нужно индексировать ваш сайт. 10 ресурсов - оптимальное значение. Однако, если вы получаете ошибку timeout, уменьшите это число.

В зависимости от системных настроек из БД извлекаются нужные колонки ресурсов, комментарии и разбиваются на слова. Затем по каждому слову генерируются словоформы, при помощи phpMorphy и сохраняются в таблицу индекса.

Системные настройки

Название По умолчанию Описание
mse2_index_comments true Включить индексирование комментариев компонента Tickets
mse2_index_comments_weight 1 Поисковый вес слова, встречающегося в комментарии
mse2_index_fields content:3,description:2,introtext:2,pagetitle:3,longtitle:3 Настройка индексирования полей ресурса. Имя поля и его поисковый вес через двоеточие
mse2_index_min_words_length 4 Минимальная длина слова для участия в поиске

Самым важным параметром является mse2_index_fields, именно он определяет, какую ценность представляют слова в разных полях документа.

Логика работы

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

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

Таким образом, весь ваш сайт разбивается на тысячи вариантов слов, по которым и будет происходить поиск. В индекс попадают только те документы, у которых отмечен параметр searchable — то есть, они "Участвует в поиске".

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

Генерировать поисковый индекс в админке нужно ровно в двух случаях:

  • При первой установке компонента
  • При изменении системных настроек, отвечающих за индексацию

Добавление произвольных слов в индекс

Бывают случаи, когда вам нужно добавить в индекс к документам какие-то свои произвольные слова. Для этого с версии 1.5.2-pl можно использовать плагин на событие mse2OnBeforeSearchIndex:

<?php
switch ($modx->event->name) {
    case 'mse2OnBeforeSearchIndex':
        $mSearch2->fields['my_field'] = 1;
        $resource->set('my_field', 'My Words');

        if ($resource->get('class_key') == 'msProduct') {
            $mSearch2->fields['product_field'] = 1;
            $resource->set('product_field', 'Product Property');
        }
        break;
}

В данном примере всем ресурсам добавится в индекс поле my_field со словом "WORDS" ("my" не попадёт в индекс из-за ограничения длины по умолчанию), а товарам miniShop2 будет добавлено еще и product_field со словами "Product" и "Property".

Таким образом вы можете добавлять абсолютно любые произвольные слова в индекс ресурсов.