2009-11-01 6 views
5

Ich möchte nur bestimmte Knoten indiziert werden. Das Modul "Search Config" beansprucht diese Fähigkeit, aber es funktioniert nicht. Also, wie bearbeite ich entweder das Knotenmodul, um nur bestimmte Knoten zu indizieren, oder noch besser, ein Modul, das dies für mich tun kann?Wie kann man die Drupal-Suche von der Indizierung aller Inhaltstypen einschränken?

+1

Definieren Sie "funktioniert nicht". Haben Sie den Support der Search Config Maintainers kontaktiert? – ceejayoz

+1

By funktioniert nicht, ich meine, es verhindert, dass sie in den Suchergebnissen angezeigt werden, aber es stoppt nicht die Indexierung dieser Knoten. Was ich brauche. – coderama

Antwort

3

Dies ist a long standing feature request, aber es sieht aus wie es bereits mindestens geschoben Drupal 8:/

Sie können einige Abhilfe Vorschläge in der Feature-Request Diskussion finden oben verbunden, aber der ‚Standard‘ Ansatz von Das Suchkonfigurationsmodul ist described here. Es verhindert nicht, dass die Knoten indiziert werden, sondern manipuliert die Suchabfragen, um bestimmte Einträge (z. B. Knotentypen) zu ignorieren, sodass sie nicht auf den Suchergebnisseiten angezeigt werden.

Da es im Moment keine offensichtlich bessere Lösung gibt (afaik), stimme ich mit ceejayoz' Kommentar überein, dass Sie zuerst nachschauen sollten, warum das Modul search config für Sie nicht funktioniert, bevor Sie Ihre eigene Lösung programmieren.

Wenn Sie auf die Bearbeitung des Knotenmoduls selbst zurückgreifen müssen, wäre node_update_index() der Ort zum Starten.

3

Hier ist die Abfrage, die bestimmt, was indiziert werden muss, von 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 

Sie können die Indizierung Skript läuft nicht verhindern. Aber Sie können diese Abfrage in den Denkinhalt hineinführen, der schon indiziert wird, indem Sie Dummyeinträge in {search_dataset} einfügen.

Zum Beispiel, wenn Sie MySQL verwenden, tun dies auf 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 = '' 

Ersetzen „RESTRICTED_TYPES“ mit Ihrer Liste der Knotentypen, und beschränken möchten für jede Entität Sie eine ähnliche Abfrage tun aus Suche.

+1

Sie können auch Ihre Tabelle search_index bereinigen, die extrem sperrig werden kann, wie folgt: "DELETE from search_index wo sid in (SELECT nid FROM Knoten WHERE node.type IN (RESTRICTED_TYPES)" – aaronbauman

+0

Eine weitere Sache, Sie können müssen Sie Ihre search_total Tabelle manuell bereinigen, wenn Sie eine sehr große Datenbank haben: "DELETE FROM search_total WHERE Wort NICHT IN (SELECT DISTINCT Wort FROM search_index)" Sonst hat search.module keinen Speicher mehr und versucht alle fehlenden Elemente in a zu laden einzelne Abfrage. – aaronbauman

Verwandte Themen