2009-11-01 7 views
5

私は特定のノードのインデックスを作成するだけです。 「検索設定」モジュールはこの機能を持つと主張しますが、機能しません。ですから、ノードモジュールを編集して特定のノードのみを索引付けするか、それとももっと良いのですが、私のためにこれを行うことができるモジュールを含めるにはどうすればよいですか?drupal検索ですべてのコンテンツタイプのインデックスを作成する方法を制限するにはどうすればよいですか?

+1

「動作しません」と定義します。サポートのために検索設定保守担当者に連絡しましたか? – ceejayoz

+1

Byは動作しません。つまり、検索結果に表示されなくなりますが、これらのノードのインデックス作成は停止しません。それは私が必要なものです。 – coderama

答えて

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テーブルをきれいにすることもできます。次のように非常にかさばることがあります: "DELETE from search_index where のsid(SELECT nid FROMノードWHERE node.type IN(RESTRICTED_TYPES)" – aaronbauman

+0

もう1つ、非常に大きなデータベースを持っている場合は、手動でsearch_totalテーブルをクリーンアップする必要があります: "DELETE FROM search_total WHERE word not in(SELECT DISTINCT word FROM search_index)"そうでなければ、search.moduleがメモリ不足になり、単一のクエリ。 – aaronbauman

関連する問題