2009-11-01 98 views
5

我只希望某些节点被索引。 “搜索配置”模块声称具有此功能,但它不起作用。那么,我该如何编辑节点模块来仅索引某些节点,或者更好地实现一个可以为我做到这一点的模块?如何限制drupal搜索索引所有内容类型?

+1

定义“不起作用”。您是否联系了搜索配置维护人员以获得支持? – ceejayoz 2009-11-01 14:55:50

+1

By不起作用,我的意思是它阻止它们出现在搜索结果中,但它不会停止这些节点的索引。这是我需要的。 – coderama 2009-11-01 17:20:07

回答

3

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

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

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

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

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”与您的节点类型的列表,你想从限制每个实体做类似查询搜索。

+1

您可能还想清理您的search_index表,它可能变得非常庞大,如下所示:“从search_index中删除,其中sid为 (SELECT nid FROM节点WHERE node.type IN(RESTRICTED_TYPES)” – aaronbauman 2013-02-18 22:05:10

+0

还有一件事,您可以如果你有一个非常大的数据库,需要手动清理你的search_total表:“DELETE FROM search_total WHERE word NOT IN(SELECT DISTINCT word FROM search_index)”否则search.module内存不足会尝试加载所有缺少的项目单个查询。 – aaronbauman 2013-02-19 15:12:49