Рейтинг:3

Как переиндексировать весь контент для основной поисковой системы?

флаг br

Есть ли способ переиндексировать весь контент для основной поисковой системы?

В более старых версиях вы могли переиндексировать с помощью drush:

drush search-reindex --immediate --verbose

Однако, похоже, это уже не вариант. В более поздних версиях drush можно сделать так:

drush search-api-reindex

Однако эта команда предназначена для модуля API поиска, а не для основного поискового индекса.

Как выполнить массовую переиндексацию основного поискового индекса? Cron будет индексировать только до 500 элементов за раз, но мне нужно проиндексировать десятки тысяч элементов.

Рейтинг:2
флаг cn

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

drush ev "\Drupal::service('search.index')->markForReindex();"

а затем запустить драш крон так часто, как вам нужно.

Например, в цикле Bash:

for (( c=1; c<=5; c++ )); сделать drush cron; сделано
флаг br
Это помечает элементы для повторной индексации, но я не думаю, что она их переиндексирует. Отличается ли это от нажатия кнопки «Переиндексировать сайт» в admin/config/search/pages?
4uk4 avatar
флаг cn
Этот ответ касается решения для сценариев, которое заменяет больше недоступную единственную команду drush несколькими для массового повторного индексирования. Дело не в пользовательском интерфейсе. Кроме того, немедленная возможность запустить это в одном пакете имела свои ограничения.Даже когда старая команда все еще была доступна, переиндексацию нужно было запускать пакетами, чтобы избежать тайм-аутов и ограничений памяти.
флаг br
Если я запущу эту функцию markForReindex(), а затем один раз запущу cron, приведет ли это к индексации всего контента? Это не так. Похоже, это имеет тот же эффект, что и нажатие кнопки «Переиндексировать сайт» в admin/config/search/pages с последующим запуском cron. Другими словами, будет переиндексирована одна партия, а не весь контент.
флаг br
Проблема с пакетами заключается в том, что для индексации всего контента в таком темпе потребуется более двух недель. Есть десятки тысяч элементов для индексации.
Kevin avatar
флаг in
Почему на индексацию уходят недели? У меня есть сайт со 120 000 элементов, и это занимает всего несколько часов (из-за того, что он также извлекает и индексирует вложения PDF) через Drush. Я бы просто переключился на Search API/Search API Database, это в миллион раз лучше, чем основной поисковый модуль.
флаг br
Я считаю, что мне нужно использовать основной модуль поиска, потому что он зависит от фильтра Views «Search Keywords». Отдельно я использую Search API для основной поисковой системы сайта. Но у меня есть фильтр представлений, для которого мне нужна основная функция поиска. Почему это займет недели? Я не знаю. Что я вижу, так это то, что если я запускаю cron, он переходит с 13% завершения на 14% завершения и т. д. И почему запуск cron — единственный способ переиндексации? Либо это? Что делать, если я не хочу запускать другие процессы, инициированные cron?
4uk4 avatar
флаг cn
Вам не нужно ждать неделями, вы можете запускать `drush cron` в цикле подряд. Тогда не имеет значения, какой размер пакета вы настроили, накладные расходы на каждый пакетный запуск не будут иметь большого значения. Если вы не хотите запускать другие процессы, инициированные cron, вы можете напрямую вызвать хук `search_cron()`.
4uk4 avatar
флаг cn
... недостаток, вы можете столкнуться с проблемами при одновременном запуске cron. Так что лучше используйте `drush cron`.
флаг br
Спасибо. Я запустил `drush cron`. Похоже, что `search_cron()` занимает очень много времени. В терминале вывод доходит до `"Начало выполнения search_cron()"` и просто зависает. Я не знаю, делает ли он что-нибудь или нет, но если я обновляю `admin/config/search/pages` каждые несколько минут, количество проиндексированных элементов не меняется. Кажется, что запуск cron никогда не завершается. ps -- На самом деле я только что видел изменение в `admin/config/search/pages`, но каждые несколько минут в индекс добавляется только один элемент.
4uk4 avatar
флаг cn
При обычной установке Drupal вы можете индексировать 500 элементов за раз. Если рендеринг индексируемых узлов занимает больше времени, чем обычно, вам нужно уменьшить количество элементов, пока сценарий не завершится в разумное время. См. INDEXING THROTTLE в admin/config/search/pages.
флаг br
У меня отсутствовали индексы в таблице базы данных search_index, что сильно замедляло переиндексацию. Теперь это исправлено, и запуск cron теперь может быть завершен. Запуск cron занимает около 2 минут, если я устанавливаю Indexing Throttle на 500. Так что на самом деле в моем случае нецелесообразно запускать cron много раз, пока это не будет сделано.
4uk4 avatar
флаг cn
Используйте цикл, я добавляю пример.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.