Переиндексировать выбранную группу узлов
Я поддерживаю сайт, который я не создавал. Было обнаружено, что около 300 узлов типа "пользовательский" имели неправильные псевдонимы URL-адресов. На данный момент на сайте насчитывается в общей сложности 7961 узел типа "пользовательский".
$ drush sql-query "SELECT COUNT(nid) FROM node WHERE type LIKE 'custom';"
Я нашел список команд solr drush и вижу, что solr-delete-index
может удалить определенный тип контента, а затем solr-mark-all
может использоваться для указания, что все они должны быть переиндексированы. Мой вопрос в том, как я могу переиндексировать только 300 плохих на этом живом сайте.
У меня уже есть их nid в отдельном csv-файле, созданном на основе пользовательского sql-запроса.
Просто для ясности:
- сайт живой, и важно, чтобы он таким и оставался
- существует только небольшая часть типа контента, которая нуждается в переиндексации
- У меня есть все разрешения и доступ, не нужно спрашивать, могу ли я куда-то попасть. Предположим, я смогу.
- У меня есть средства для идентификации узлов для переиндексации и передачи их различным вещам и языки. Я бы даже
xargs
создал пользовательский скрипт drush, если у вас есть средства для выполнения этого с одним узлом.
1 answers
В случае, если вы не найдете лучшего способа (не похоже, что существует существующая команда Drush), вот довольно простое решение, собранное из различных функций в модуле:
$solr = apachesolr_get_solr();
$nids = array(1, 2, 3, 4, ...);
foreach ($nids as $nid) {
$solr->deleteById(apachesolr_document_id($nid));
db_update('apachesolr_search_node')
->condition('nid', $nid)
->fields(array('changed' => REQUEST_TIME, 'status' => 1))
->execute();
}
apachesolr_index_set_last_updated(REQUEST_TIME);
Непроверенный, используйте с осторожностью!