如何限制drupal搜索索引所有内容类型?

时间:2009-11-01 14:02:20

标签: php search drupal

我只希望将某些节点编入索引。 “搜索配置”模块声称具有此功能,但它不起作用。那么,如何编辑节点模块以仅为某些节点编制索引,或者更好的是,为我提供一个可以执行此操作的模块?

2 个答案:

答案 0 :(得分:3)

这是a long standing feature request,但看起来它已经被推到了至少Drupal 8:/

您可以在上面链接的功能请求讨论中找到一些变通方法建议,但搜索配置模块使用的“标准”方法是described here。它不会阻止节点被编入索引,但会操纵搜索查询以忽略某些条目(例如节点类型),以便它们不会显示在搜索结果页面上。

由于目前没有明显更好的解决方案(afaik),我同意ceejayoz的评论,在开始自定义编码自己的解决方案之前,您应首先检查搜索配置模块为什么不适合您。

如果你不得不求助于编辑节点模块本身,node_update_index()就是开始的地方。

答案 1 :(得分:3)

这是确定需要编入索引的查询,来自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”替换为您的节点类型列表,并对要从搜索中限制的每个实体执行类似的查询。