2009-11-01 138 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