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

Таблица search_index

Таблица search_index является центральной таблицей для хранения поискового индекса в Drupal. Она содержит отдельные слова, извлеченные в процессе индексации из содержимого узлов (нод), комментариев, пользовательских профилей и других индексируемых сущностей. Каждое слово связывается с конкретным фрагментом контента (sid) и типом контента (type), что позволяет быстро находить релевантные результаты при выполнении поисковых запросов.

Поля

Поле Тип данных Описание
word varchar(50) Слово, которое было извлечено и проиндексировано. Одно из ключевых полей для поиска.
sid int Идентификатор искомого элемента (Search ID). Ссылается на ID элемента в основной таблице индекса search_dataset.
type varchar(16) Тип индексируемого элемента. Обычно соответствует машинному имени типа контента (ноды), модуля (например, user для пользователей) или другого типа сущности.
score float Вес слова. Определяет релевантность слова в данном фрагменте контента. Зависит от того, в каком поле (заголовок, тело, теги) было найдено слово.
language varchar(12) Язык, для которого проиндексировано слово. Соответствует языковому коду (например, en, ru). Позволяет осуществлять поиск в рамках определенного языка на мультиязычных сайтах.

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

Когда контент создается или обновляется, Drupal запускает процесс индексации. Текст из различных полей (заголовок, основное тело, поля с текстом) разбивается на отдельные слова (токенизируется). Слова очищаются от окончаний (стемминг) и приводятся к нижнему регистру. Для каждого такого слова в таблицу search_index добавляется запись, которая связывает это слово с ID проиндексированного элемента (sid), его типом (type) и языком (language).

При выполнении пользователем поискового запроса, его фраза также разбивается на слова. Для каждого слова система ищет совпадения в поле word. Затем результаты по всем словам из запроса агрегируются, вычисляется общий рейтинг релевантности для каждого элемента (sid) на основе суммы весов (score), и результаты сортируются по убыванию этого рейтинга.

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

Поле score играет ключевую роль в ранжировании. Разные части контента имеют разный вес. Например, слово, найденное в заголовке (title), обычно имеет больший вес, чем слово, найденное в теле текста (body), что повышает релевантность этого результата.

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

Найти 10 самых релевантных нод типа 'article', содержащих слова 'drupal' и 'модуль', можно следующим запросом:

SELECT i.sid, SUM(i.score) AS total_score, d.data FROM search_index i INNER JOIN search_dataset d ON i.sid = d.sid AND i.type = d.type WHERE i.word IN ('drupal', 'модуль') AND i.type = 'node' AND d.type = 'node' GROUP BY i.sid, d.data ORDER BY total_score DESC LIMIT 10;

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

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