Come funziona la ricerca di WordPress dietro le quinte?

27 set 2013, 18:48:47
Visualizzazioni: 19.3K
Voti: 13

Sto utilizzando la ricerca di WordPress per cercare tra diversi custom post type e permettere all'utente di esplorare ciascun tipo di contenuto individualmente.

Tuttavia sto notando che WordPress non restituisce sempre quelli che considererei i "migliori" risultati per primi. Ad esempio, se cerco "Microsoft", le pagine che contengono il termine sporadicamente vengono comunque mostrate prima di pagine che usano regolarmente il termine.

Fondamentalmente sto cercando informazioni su come WordPress classifica le pagine e determina la rilevanza, e se posso influenzare questo comportamento senza dover installare alcun plugin.

Ogni aiuto è molto apprezzato.

3
Commenti

Questa è una domanda piuttosto ampia per questo sito -- dai un'occhiata alle sezioni cosa chiedere & cosa non chiedere. Ho fatto un paio di ricerche veloci su Google e mi sono imbattuto in questo: Make WordPress' Search Suck Less (è del 2008, quindi i risultati potrebbero variare). Per quanto riguarda influenzare la funzionalità senza plugin -- Se sei allergico ai plugin di altri, probabilmente dovrai scriverne uno tuo. I plugin influenzano semplicemente il funzionamento di WP, ed è esattamente quello che stai cercando di fare. Giusto?

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

Grazie, non è che voglio evitare di usare i plugin degli altri, più che altro voglio evitare il "plugin sprawl", cioè "Oh, userò un plugin per questo e quello" e prima che te ne accorga, hai 30 plugin in esecuzione.

chrisd chrisd
30 set 2013 16:33:47

Capisco e sono solidale. Io utilizzo diversi plugin, ma ne ho scritti un bel po' personalmente.

Pat J Pat J
30 set 2013 17:32:55
Tutte le risposte alla domanda 2
2
10

MODIFICA - La versione attuale di WordPress supporta la rilevanza, quindi questa risposta non è più accurata.


Non esiste un concetto di ranking o rilevanza, è solo una semplice query LIKE sul titolo e sul contenuto del post:

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

Puoi utilizzare il filtro posts_search per modificare o completamente sostituire la query di ricerca con una tua. Da /wp-includes/query.php:

// Consente ai plugin di aggiungere/rimuovere/modificare contestualmente la sezione di ricerca della query del database
$search = apply_filters_ref_array('posts_search', array( $search, &$this ) );

Vedi anche i filtri di query disponibili nella pagina Codex di WP_Query.

27 set 2013 19:27:27
Commenti

Che coincidenza che tu lo dica… Nacin ha appena committato il codice per ordinare per rilevanza circa un'ora fa. In effetti, probabilmente nello stesso momento in cui stavi scrivendo la tua risposta. :)

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

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

Per blog grandi/popolari, cercare in tutto il contenuto è piuttosto irrealistico. Qual è il modo consigliato per velocizzare questa operazione senza dover semplicemente eliminare "OR (...)" da query.php? Dovrei aprire una nuova domanda o puoi espandere la tua risposta?

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

Da WordPress 3.7 (ottobre 2013), i risultati di ricerca sono ordinati secondo i seguenti criteri (vedi ticket 7394):

  • Corrispondenze esatte della frase nei titoli dei post.
  • Tutti i termini di ricerca nei titoli dei post.
  • Qualsiasi termine di ricerca nei titoli dei post.
  • Corrispondenze esatte della frase nel contenuto dei post.

Ogni sezione e i post rimanenti vengono poi ordinati per data.

Sono stati introdotti anche nuovi filtri:

  • wp_search_stopwords, per filtrare le stop word ignorate nella clausola WHERE.
  • posts_search_orderby, per filtrare la clausola ORDER BY durante l'ordinamento dei risultati di ricerca.
16 feb 2014 19:54:09