public function HelpSearch::updateIndex in Drupal 10
Same name and namespace in other branches
- 8 core/modules/help_topics/src/Plugin/Search/HelpSearch.php \Drupal\help_topics\Plugin\Search\HelpSearch::updateIndex()
- 9 core/modules/help_topics/src/Plugin/Search/HelpSearch.php \Drupal\help_topics\Plugin\Search\HelpSearch::updateIndex()
File
- core/
modules/ help_topics/ src/ Plugin/ Search/ HelpSearch.php, line 311
Class
- HelpSearch
- Handles searching for help using the Search module index.
Namespace
Drupal\help_topics\Plugin\SearchCode
public function updateIndex() {
// Update the list of items to be indexed.
$this
->updateTopicList();
// Find some items that need to be updated. Start with ones that have
// never been indexed.
$limit = (int) $this->searchSettings
->get('index.cron_limit');
$query = $this->database
->select('help_search_items', 'hsi');
$query
->fields('hsi', [
'sid',
'section_plugin_id',
'topic_id',
]);
$query
->leftJoin('search_dataset', 'sd', '[sd].[sid] = [hsi].[sid] AND [sd].[type] = :type', [
':type' => $this
->getType(),
]);
$query
->where('[sd].[sid] IS NULL');
$query
->groupBy('hsi.sid')
->groupBy('hsi.section_plugin_id')
->groupBy('hsi.topic_id')
->range(0, $limit);
$items = $query
->execute()
->fetchAll();
// If there is still space in the indexing limit, index items that have
// been indexed before, but are currently marked as needing a re-index.
if (count($items) < $limit) {
$query = $this->database
->select('help_search_items', 'hsi');
$query
->fields('hsi', [
'sid',
'section_plugin_id',
'topic_id',
]);
$query
->leftJoin('search_dataset', 'sd', '[sd].[sid] = [hsi].[sid] AND [sd].[type] = :type', [
':type' => $this
->getType(),
]);
$query
->condition('sd.reindex', 0, '<>');
$query
->groupBy('hsi.sid')
->groupBy('hsi.section_plugin_id')
->groupBy('hsi.topic_id')
->range(0, $limit - count($items));
$items = $items + $query
->execute()
->fetchAll();
}
// Index the items we have chosen, in all available languages.
$language_list = $this->languageManager
->getLanguages(LanguageInterface::STATE_CONFIGURABLE);
$section_plugins = [];
$words = [];
try {
foreach ($items as $item) {
$section_plugin_id = $item->section_plugin_id;
if (!isset($section_plugins[$section_plugin_id])) {
$section_plugins[$section_plugin_id] = $this
->getSectionPlugin($section_plugin_id);
}
if (!$section_plugins[$section_plugin_id]) {
$this
->removeItemsFromIndex($item->sid);
continue;
}
$section_plugin = $section_plugins[$section_plugin_id];
$this->searchIndex
->clear($this
->getType(), $item->sid);
foreach ($language_list as $langcode => $language) {
$topic = $section_plugin
->renderTopicForSearch($item->topic_id, $language);
if ($topic) {
// Index the title plus body text.
$text = '<h1>' . $topic['title'] . '</h1>' . "\n" . $topic['text'];
$words += $this->searchIndex
->index($this
->getType(), $item->sid, $langcode, $text, FALSE);
}
}
}
} finally {
$this->searchIndex
->updateWordWeights($words);
$this
->updateIndexState();
}
}