Переиндексировать выбранную группу узлов


Я поддерживаю сайт, который я не создавал. Было обнаружено, что около 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, если у вас есть средства для выполнения этого с одним узлом.
 2
Author: DeveloperWeeks, 2015-12-22

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);

Непроверенный, используйте с осторожностью!

 1
Author: Clive, 2015-12-22 19:24:53