НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
81 of 182 menu

Таблица search_dataset

Таблица search_dataset является центральным хранилищем индексированного контента для стандартного модуля Search в Drupal. Когда контент (ноды, пользователи, комментарии и т.д.) индексируется для поиска, его текст обрабатывается (разбивается на слова, применяются фильтры) и сохраняется в эту таблицу. Это позволяет системе быстро находить релевантные результаты при выполнении поисковых запросов.

Поля

Поле Тип данных Описание
sid int Идентификатор сущности, к которой относятся данные. Это не внутренний ID сущности (например, nid), а внешний ключ, связывающий с таблицей search_index.
type varchar(16) Тип индексируемого элемента. Определяет, к какой сущности относятся данные. Например: node (для материалов), user (для пользователей), comment (для комментариев). Значения соответствуют машинным именам типов контента или других индексируемых сущностей.
data longtext Основное поле, содержащее весь обработанный текст, подготовленный для индексации. Сюда входят заголовки, тела материалов, теги, названия полей и другой контент, который должен участвовать в поиске. Текст очищается от HTML-тегов и обрабатывается фильтрами ввода.
reindex int Флаг, указывающий на необходимость переиндексации данного элемента. Если значение отлично от 0 (обычно 1), это означает, что исходный контент был изменен и данные в этом поле устарели. При следующем запуске cron или принудительной индексации запись будет обновлена.

Как это работает

Процесс поиска в Drupal состоит из двух основных этапов: индексации контента и выполнения поисковых запросов. Таблица search_dataset играет ключевую роль на первом этапе.

Когда пользователь сохраняет или обновляет контент (например, ноду), система помечает его для повторной индексации, устанавливая поле reindex или добавляя запись в таблицу очереди. При запуске cron или ручной индексации модуль Search обрабатывает помеченные элементы.

Для каждого индексируемого элемента вызываются соответствующие хуки (например, hook_search_index), которые собирают весь текст, подлежащий индексации. Этот текст очищается от разметки, обрабатывается токенизатором (разбивается на слова) и сохраняется в поле data таблицы search_dataset.

Одновременно с этим отдельные слова из этого текста извлекаются и сохраняются в связанную таблицу search_index вместе с информацией о том, в каком поле и в каком контексте они были найдены. Это позволяет производить ранжирование результатов.

При выполнении поискового запроса система обращается к таблице search_index для нахождения совпадений по ключевым словам, а затем, если требуется, может использовать search_dataset для извлечения фрагментов текста (сниппетов) с подсветкой найденных слов для отображения в результатах поиска.

Флаг reindex обеспечивает актуальность поискового индекса. При изменении контента соответствующая запись в search_dataset помечается для переиндексации, что гарантирует, что при следующем запуске cron поисковые данные будут обновлены.

Пример SQL-запроса

Найти все индексированные данные для конкретной ноды (например, с sid = 42) можно следующим запросом:

SELECT sid, type, data, reindex FROM search_dataset WHERE sid = 42 AND type = 'node';

Проверить, какие элементы ожидают переиндексации:

SELECT sid, type FROM search_dataset WHERE reindex <> 0;

Смотрите также

  • таблицу search_index,
    которая хранит индекс отдельных слов для поиска
  • таблицу search_total,
    которая хранит общую статистику поисковых слов
  • таблицу node,
    которая хранит основные данные материалов (нод)
  • таблицу users,
    которая хранит данные пользователей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить