Как ограничить поиск drupal от индексации всех типов контента? - PullRequest
5 голосов
/ 01 ноября 2009

Я хочу, чтобы только некоторые узлы были проиндексированы. Модуль "search config" утверждает, что имеет эту возможность, но она не работает. Итак, как мне отредактировать модуль узла, чтобы индексировать только определенные узлы, или, что еще лучше, реализовать модуль, который может сделать это для меня?

Ответы [ 2 ]

3 голосов
/ 19 февраля 2013

Вот запрос, который определяет, что нужно индексировать, из node_update_index () :

SELECT n.nid FROM {node} n 
  LEFT JOIN {search_dataset} d ON d.type = 'node' AND d.sid = n.nid 
  WHERE d.sid IS NULL OR d.reindex <> 0
  ORDER BY d.reindex ASC, n.nid ASC

Вы не можете запретить запуск сценария индексирования. Но вы можете обмануть этот запрос, думая, что контент уже проиндексирован, вставив фиктивные записи в {search_dataset}.

Например, если вы используете MySQL, сделайте это на cron:

INSERT INTO {search_dataset} 
  (sid, type, data, reindex)
  SELECT nid, 'node', '', 0 FROM {node} WHERE node.type IN (RESTRICTED_TYPES)
  ON DUPLICATE KEY UPDATE reindex = 0, data = ''

Замените "RESTRICTED_TYPES" списком типов узлов и выполните аналогичный запрос для каждой сущности, которую вы хотите ограничить в поиске.

3 голосов
/ 01 ноября 2009

Это длительный запрос функции , но похоже, что он уже был переведен как минимум в Drupal 8: /

Вы можете найти некоторые обходные решения в обсуждении запроса функции, связанном выше, но «стандартный» подход, используемый модулем конфигурации поиска, - , описанный здесь . Он не препятствует индексации узлов, но манипулирует поисковыми запросами, чтобы игнорировать определенные записи (например, типы узлов), чтобы они не отображались на страницах результатов поиска.

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

Если вам нужно прибегнуть к редактированию самого модуля узла, node_update_index() будет местом для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...