Comment fonctionne la recherche WordPress en arrière-plan?

11

J'utilise la recherche WordPress pour rechercher une gamme de types de publication personnalisés et permettre à l'utilisateur d'explorer chaque type de publication.

Cependant, je constate que WordPress ne retourne pas ce que je considérerais comme les `` meilleurs '' matchs en premier. Par exemple, si je recherche Microsoft, les pages qui contiennent le terme de manière irrégulière sont toujours renvoyées avant les pages qui utilisent régulièrement le terme.

Fondamentalement, j'essaie de trouver des informations sur la façon dont WordPress classe les pages et détermine la pertinence et si je peux influencer cela sans avoir à installer de plugins .

Toute aide très appréciée.

chrisd
la source
2
C'est une vaste question horrible pour ce site - voir les sections quoi demander et quoi ne pas demander . J'ai fait quelques recherches rapides sur Google, et je suis tombé sur ceci: faire en sorte que la recherche de WordPress suce moins (c'est à partir de '08, donc YMMV). En ce qui concerne l'influence sur les fonctionnalités sans plugins - Si vous êtes allergique aux plugins des autres, vous devrez probablement en écrire un des vôtres. Les plugins affectent simplement le fonctionnement de WP, et c'est ce que vous essayez de faire. Droite?
Pat J
1
Merci, ce n'est pas que je ne veux pas éviter d'utiliser les plugins des autres, plus le fait que je veux éviter 'l'extension des plugins', c'est-à-dire "Oh, j'aurai un plugin pour ceci et cela" et avant de le savoir, vous en avez 30 en cours d'exécution.
chrisd
Je comprends et sympathise. J'exécute un certain nombre de plugins, mais j'en ai écrit un tas.
Pat J

Réponses:

10

EDIT - La version actuelle de WordPress prend en charge la pertinence, donc cette réponse n'est plus exacte.


Il n'y a pas de concept de rang ou de pertinence, c'est juste une simple requête COMME sur le titre et le contenu de l'article:

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

Vous pouvez utiliser le posts_searchfiltre pour modifier ou remplacer complètement la requête de recherche par la vôtre. De /wp-includes/query.php:

// Allow plugins to contextually add/remove/modify the search section of the database query
$search = apply_filters_ref_array('posts_search', array( $search, &$this ) );

Consultez également les filtres de requête disponibles sur la WP_Querypage Codex .

Milo
la source
4
C'est drôle, vous devriez dire que… Nacin s'est engagé à trier le code par pertinence il y a environ une heure. En fait, probablement en même temps que vous écriviez votre réponse. :) core.trac.wordpress.org/changeset/25632
Dave Ross
Pour les blogs grands / populaires, la recherche de tout le contenu est assez irréaliste. Quelle est la façon recommandée d'accélérer cela sans simplement supprimer le "OU (...)" de query.php? Dois-je soumettre une nouvelle question ou pouvez-vous développer votre réponse?
PJ Brunet
5

Depuis WordPress 3.7 (octobre 2013) , les résultats de la recherche sont triés selon les critères suivants (voir ticket 7394 ):

  • Correspondances de phrases complètes dans les titres des articles.
  • Tous les termes de recherche dans les titres des articles.
  • Tous les termes de recherche dans les titres des articles.
  • Correspondance de phrase complète dans le contenu du post.

Chaque section et tous les messages restants sont ensuite triés par date.

Il existe également de nouveaux filtres:

  • wp_search_stopwords, pour filtrer les mots vides ignorés WHERE.
  • posts_search_orderby, pour filtrer les ORDER BYrésultats lors de la commande des résultats de recherche.
fuxia
la source