2009-11-01 15 views
5

Chcę, aby tylko niektóre węzły były indeksowane. Moduł "search config" twierdzi, że ma taką możliwość, ale nie działa. Jak więc albo edytować moduł węzła, aby indeksować tylko niektóre węzły, albo jeszcze lepiej, zastosować moduł, który może to dla mnie zrobić?Jak ograniczyć wyszukiwanie drupalne przed indeksowaniem wszystkich typów zawartości?

+1

Definiuj "nie działa". Czy skontaktowałeś się z opiekunami konfiguracji wyszukiwania w celu uzyskania wsparcia? – ceejayoz

+1

Nie działa, tzn. Uniemożliwia ich wyświetlenie w wynikach wyszukiwania, ale nie zatrzymuje indeksowania tych węzłów. Właśnie tego potrzebuję. – coderama

Odpowiedz

3

To a long standing feature request, ale wygląda na to, że już zostało zepchnięte na przynajmniej Drupal 8:/

Można znaleźć kilka propozycji obejścia w dyskusji żądanie cecha połączonego powyżej, ale podejście „norma” wykorzystywane przez moduł konfiguracji wyszukiwania to described here. Nie zapobiega on indeksowaniu węzłów, ale manipuluje zapytaniami, aby ignorować określone wpisy (np. Typy węzłów), aby nie pojawiały się na stronach wyników wyszukiwania.

Ponieważ obecnie nie ma lepszego rozwiązania (afaik), zgadzam się z komentarzem ceejayoz'a, że ​​najpierw należy sprawdzić, dlaczego moduł konfiguracji wyszukiwania nie działa dla ciebie przed rozpoczęciem niestandardowego kodowania własnego rozwiązania.

Jeśli musisz użyć edytora samego modułu węzła, to miejsce, od którego należy zacząć, to node_update_index().

3

Tutaj jest kwerenda, która określa, co musi być indeksowane, od 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 

Nie można zapobiec skrypt indeksujący z systemem. Ale możesz oszukać, że zapytanie do treści myślącej zostało już zaindeksowane przez wstawienie fałszywych wpisów do {search_dataset}.

Na przykład, jeśli używasz MySQL, to zrobić na 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 = '' 

Zamień „RESTRICTED_TYPES” z listy typów węzłów i zrobić podobną zapytanie dla każdego podmiotu, który chcesz ograniczyć od Szukaj.

+1

Możesz również wyczyścić tabelę search_index, która może stać się bardzo nieporęczna, na przykład: "DELETE from search_index, gdzie sid w (SELECT nid FROM node WHERE node.type IN (RESTRICTED_TYPES)" – aaronbauman

+0

Jeszcze jedno, możesz musisz wyczyścić tabelę search_total ręcznie, jeśli masz bardzo dużą bazę danych: "USUŃ FROM search_total WHERE słowo NIE IN (WYBIERZ DISTINCT słowo z search_index)". W przeciwnym razie w module wyszukiwania kończy się pamięć, próbując załadować wszystkie brakujące elementy w pojedyncze zapytanie. – aaronbauman

Powiązane problemy