2009-11-01 4 views
5

Solo quiero indexar ciertos nodos. El módulo "search config" afirma tener esta capacidad, pero no funciona. Entonces, ¿cómo puedo editar el módulo de nodo para indexar ciertos nodos, o mejor aún, implementar un módulo que pueda hacer esto por mí?¿Cómo restringir la búsqueda de Drupal de indexar todos los tipos de contenido?

+1

Definir "no funciona". ¿Ha contactado con los mantenedores de la configuración de búsqueda para obtener asistencia? – ceejayoz

+1

Por no funciona, quiero decir que les impide aparecer en los resultados de búsqueda, pero no detiene la indexación de estos nodos. Que es lo que necesito – coderama

Respuesta

3

Ésta es a long standing feature request, pero parece que ya se ha llevado a por lo menos Drupal 8:/

puede encontrar algunas sugerencias de solución en la discusión de estas solicitudes vinculado anteriormente, pero el enfoque 'estándar' utilizado por el módulo de configuración de búsqueda es described here. No impide que los nodos se indexen, pero manipula las consultas de búsqueda para ignorar ciertas entradas (por ejemplo, tipos de nodos) para que no se muestren en las páginas de resultados de búsqueda.

Como no hay una mejor solución en este momento (afaik), estoy de acuerdo con el comentario de ceejayoz de que primero debes comprobar por qué el módulo de configuración de búsqueda no funciona para ti antes de embarcarte en la codificación personalizada de tu propia solución.

Si tiene que recurrir a la edición del módulo de nodo en sí, node_update_index() sería el lugar para comenzar.

3

Aquí está la consulta que determina lo que debe ser indexado, desde 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 

No se puede evitar que el guión de indexación que se ejecute. Pero puede engañar esa consulta para que piense que el contenido ya está indexado insertando entradas ficticias en {search_dataset}.

Por ejemplo, si estás usando MySQL, hacer esto en 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 = '' 

reemplazar "RESTRICTED_TYPES" con su lista de tipos de nodos, y hacer una consulta similar para cada entidad desea restringir a partir buscar.

+1

También es posible que desee limpiar la tabla search_index, que puede ser extremadamente voluminosa, así: "DELETE from search_index where sid in (SELECCIONE nid FROM node WHERE node.type IN (RESTRICTED_TYPES)" – aaronbauman

+0

Una cosa más, puede necesita limpiar su tabla search_total manualmente si tiene una base de datos muy grande: "DELETE FROM search_total WHERE palabra NOT IN (SELECCIONE palabra DISTINCT FROM search_index)". De lo contrario, search.module se queda sin memoria tratando de cargar todos los elementos faltantes en un consulta única. – aaronbauman

Cuestiones relacionadas