Search API: Переиндексация элементов


92

Search API позволяет переиндексировать элементы в двух режимах - немедленная индексация и отложенная индексация. При запуске отложенной индексации элементы только отмечаются как устаревшие, сам индекс при этом не изменяется. Только при очередном запуске крона устаревшие элементы будут (пачками) переиндексироваться. За размер пачки отвечает параметр "Cron batch size" в настройках импорта.

1. Отложенная переиндексация элементов определенного типа по id

$type ='node';
$item_ids = array(1,2,52);
$conditions = array(
  'enabled' => 1,
  'item_type' => $type,
  'read_only' => 0,
);
$indexes = search_api_index_load_multiple(FALSE, $conditions);
if ($indexes) {
  search_api_get_datasource_controller($type)->trackItemChange($item_ids, $indexes);
}

В этом варианте не происходит ничего лишнего - только отмечаются устаревшие элементы. Вся дальнейшая работа возлагается на планировщик. Надеюсь, Вы не забыли его настроить :-)

2. Немедленная переиндексация элементов определенного типа по id

$type ='node';
$item_ids = array(1,2,52);
$conditions = array(
  'enabled' => 1,
  'item_type' => $type,
  'read_only' => 0,
);
$indexes = search_api_index_load_multiple(FALSE, $conditions);
if ($indexes) {
foreach ($indexes as $index) {
    search_api_index_specific_items_delayed($index, $item_ids);
  }
}

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

3. Самый распространенный вариант, который можно найти - search_api_track_item_change

$type ='node'; //'taxonomy_term', 'commerce_product' или что там у вас в индексе
$item_ids = array(1,2,52); //массив идентификаторов, которые нужно переиндексировать
search_api_track_item_change($type, $item_ids);

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

Принцип его работы: сначала все элементы из $item_ids отмечаются как устаревшие, потом проверяется опция индекса "Index items immediately" и если она включена, то запускается переиндексация. Вот на это стоит обратить внимание. Если нужно переиндексировать большое количество элементов, при этом нет острой необходимости делать это немедленно, то имеет смысл воспользоваться первым вариантом.

Добавить комментарий
Может быть интересно

Данный скрипт поможет пересохранить файлы Excel в csv. Может быть полезно перед отправкой прайсов на хостинг для дальнейшей обработки

6

Небольшое предисловие - опоздал на поезд :-) Вот, сижу на вокзале... Сейчас 1:10, поезд в 6:28. Есть время отдохнуть, все вспомнить и поделиться впечатлениями о первом дне кемпа.
Дальнейший рассказ - история о моем первом визите на друпал-кемп, мои личные впечатления о мероприятии в целом, мои комментарии докладов, мои итоги первого дня кемпа. 

1
Те, кто использует модуль Double field могли заметить, что в текстовой области отсутствует редактор. Бывают случаи, когда для удобства наполнения он просто необходим.
1
Данный модуль просто незаменим, если на Вашем сайте реализована мультиязычность или на Вашем сайте используются панели. Multilingual Panels позволяет создавать/менять настройки панели для различных языков.
1
Для загрузки файлов путем перетаскивания для drupal 7 есть отличный модуль file_resup. Из коробки он работает с полями сущностей. А вот компонент вебформы file обделен данной возможностью. Но мы это исправим и научим наши вебформы Drag-and-drop загрузке файлов.
1