У меня есть материалы, которые со временем могут автоматически менять статус опубликованности. Индексирую их с помощью Search API. Есть views которые выводит проиндексированные опубликованные материалы.
Когда я создаю материал, то по крону он у меня индексируется и появляется во вьюсе. Вижу сообщение "Indexed 1 items for index Default node index." - все ОК.
Скажем, через день, материал автоматически (модулем Classified Ad) снимается с публикации. По идее, по очередному крону материал должен закинуться в индекс со статусом "не опубликован". Но этого не происходит, во вьюсе он так и висит, в журнале никаких сообщений о запуске переиндексации нет.
В настройках индекса на закладке "Фильтры" флаг "Исключить неопубликованные материалы" снят, т.е. при индексации они все равно должны "дергаться".
Если же я нажму принудительную переиндексацию, то все переиндексируется на ура, и неопубликованный материал уйдет.
Короче, какая-то фигня при запуске кроном индексации, как будто не видятся неопубликованные ноды, не понимаю.
Комментарии
Могу предположить, что Classified Ads меняет статус ноды прямой записью в БД. Впрочем, я сейчас скачал этот модуль и рука сразу потянулась в файл classified.scheduled.inc - так и есть. А чтобы материал попал в очередь на переиндексацию и ушёл из индекса по крону, так как он снят с публикации, - он должен быть сохранён через node_save. Поэтому, Вы и получаете тот результат, который получаете.
Вам нужно в тот момент, когда Classified Ads снимает ноду с публикации, добавить её вручную в очередь для индексации:
<?php
$indexes = search_api_index_load_multiple(array('НАЗВАНИЕ_ИНДЕКСА'));
search_api_get_datasource_controller('node')->trackItemChange(МАССИВ_NID_НОД_ДЛЯ_ИНДЕКСАЦИИ, $indexes);
?>
Вот такие мысли сходу у меня.
Огромное спасибо, все заработало.