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" и если она включена, то запускается переиндексация. Вот на это стоит обратить внимание. Если нужно переиндексировать большое количество элементов, при этом нет острой необходимости делать это немедленно, то имеет смысл воспользоваться первым вариантом.
- 02.10.2018
- 92 просмотра