Таблица 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,
которая хранит данные пользователей