¿Cómo funciona la búsqueda de WordPress internamente?

27 sept 2013, 18:48:47
Vistas: 19.3K
Votos: 13

Estoy utilizando la búsqueda de WordPress para buscar en varios tipos de entradas personalizadas y permitir que el usuario profundice en cada tipo de entrada individual.

Sin embargo, estoy encontrando que WordPress no devuelve lo que consideraría las 'mejores' coincidencias primero. Por ejemplo, si busco Microsoft, las páginas que contienen el término de forma irregular todavía aparecen antes que las páginas que usan el término regularmente.

Básicamente estoy tratando de encontrar información sobre cómo WordPress clasifica las páginas y determina la relevancia y si puedo influir en esto sin tener que instalar ningún plugin.

Agradecería cualquier ayuda.

3
Comentarios

Esa es una pregunta demasiado amplia para este sitio -- revisa las secciones de qué preguntar y qué no preguntar. Hice un par de búsquedas rápidas en Google y encontré esto: Hacer que la búsqueda de WordPress funcione mejor (es del 2008, así que los resultados pueden variar). En cuanto a influir en la funcionalidad sin plugins -- si eres alérgico a los plugins de otros, probablemente tendrás que escribir uno propio. Los plugins simplemente afectan cómo funciona WP, y eso es lo que estás intentando hacer. ¿Correcto?

Pat J Pat J
27 sept 2013 19:09:28

Gracias, no es que quiera evitar usar plugins de otros, más bien el hecho de que quiero evitar la "proliferación de plugins", es decir, "Oh, usaré un plugin para esto y aquello" y antes de que te des cuenta, tienes 30 funcionando.

chrisd chrisd
30 sept 2013 16:33:47

Entiendo y simpatizo. Yo ejecuto varios plugins, pero he escrito muchos de ellos.

Pat J Pat J
30 sept 2013 17:32:55
Todas las respuestas a la pregunta 2
2
10

EDITAR - La versión actual de WordPress soporta relevancia, por lo que esta respuesta ya no es precisa.


No existe el concepto de rango o relevancia, es solo una simple consulta LIKE sobre el título y contenido del post:

($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')

Puedes usar el filtro posts_search para modificar o reemplazar completamente la consulta de búsqueda con la tuya. Desde /wp-includes/query.php:

// Permitir que los plugins añadan/remuevan/modifiquen contextualmente la sección de búsqueda de la consulta a la base de datos  
$search = apply_filters_ref_array('posts_search', array( $search, &$this ) );

También revisa los filtros de consulta disponibles en la página del Codex de WP_Query.

27 sept 2013 19:27:27
Comentarios

Es curioso que digas eso... Nacin hizo un commit con código para ordenar por relevancia hace aproximadamente una hora. De hecho, probablemente al mismo tiempo que estabas escribiendo tu respuesta. :)

http://core.trac.wordpress.org/changeset/25632

Dave Ross Dave Ross
27 sept 2013 21:04:54

Para blogs grandes/populares, buscar en todo el contenido es bastante poco realista. ¿Cuál es la forma recomendada de acelerar esto sin simplemente eliminar el "OR (...)" de query.php? ¿Debería publicar una nueva pregunta o puedes ampliar tu respuesta?

Jay Brunet Jay Brunet
24 ene 2014 06:03:11
0

Desde WordPress 3.7 (octubre de 2013), los resultados de búsqueda se ordenan según los siguientes criterios (ver ticket 7394):

  • Coincidencias exactas de la frase completa en los títulos de las entradas.
  • Todos los términos de búsqueda en los títulos de las entradas.
  • Cualquier término de búsqueda en los títulos de las entradas.
  • Coincidencias exactas de la frase completa en el contenido de las entradas.

Cada sección y las entradas restantes se ordenan luego por fecha.

También hay nuevos filtros:

  • wp_search_stopwords, para filtrar palabras vacías ignoradas en WHERE.
  • posts_search_orderby, para filtrar el ORDER BY al ordenar los resultados de búsqueda.
16 feb 2014 19:54:09