Como a pesquisa do WordPress funciona nos bastidores?

11

Estou usando a pesquisa do WordPress para pesquisar uma variedade de tipos de postagem personalizados e permitir que o usuário faça uma busca detalhada em cada tipo de postagem individual.

No entanto, estou descobrindo que o WordPress não está retornando o que eu consideraria as 'melhores' correspondências primeiro. Por exemplo, se eu procurar a Microsoft, as páginas que contêm o termo irregularmente ainda serão retornadas antes das páginas que o usam regularmente.

Basicamente, estou tentando encontrar algumas informações sobre como o WordPress classifica as páginas e determina a relevância e se posso influenciar isso sem precisar instalar nenhum plug-in .

Qualquer ajuda muito apreciada.

chrisd
fonte
2
Essa é uma pergunta ampla e terrível para este site - veja as seções o que perguntar e o que não perguntar . Fiz algumas pesquisas rápidas no Google e deparei-me com isso: Torne a pesquisa do WordPress menos trabalhosa (é de '08, no entanto, então YMMV). Quanto a influenciar a funcionalidade sem plug-ins - se você é alérgico a plug-ins de outras pessoas, provavelmente precisará escrever um. Os plugins simplesmente afetam o funcionamento do WP, e é isso que você está tentando fazer. Direita?
Pat J
11
Obrigado, não é que eu não deva evitar o uso de plug-ins de outras pessoas, mais o fato de que quero evitar 'expansão de plug-ins', ou seja, "Ah, eu vou ter um plug-in para isso e aquilo" e antes que você perceba, você tem 30 deles em execução.
Chrisd
Eu entendo e simpatizo. Eu corro vários plugins, mas escrevi vários deles.
Pat J

Respostas:

10

EDIT - A versão atual do WordPress suporta relevância, portanto, esta resposta não é mais precisa.


Não há conceito de classificação ou relevância, é apenas uma consulta LIKE simples no título e no conteúdo da postagem:

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

Você pode usar o posts_searchfiltro para modificar ou substituir completamente a consulta de pesquisa pela sua. 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 ) );

Veja também os filtros de consulta disponíveis na WP_Querypágina Codex .

Milo
fonte
4
Engraçado você dizer que… Nacin comprometeu o código a classificar por relevância cerca de uma hora atrás. De fato, provavelmente na mesma hora em que você escreveu sua resposta. :) core.trac.wordpress.org/changeset/25632
Dave Ross
Para blogs grandes / populares, pesquisar todo o conteúdo é bastante irreal. Qual é a maneira recomendada para acelerar isso sem apenas excluir o "OR (...)" do query.php? Devo enviar uma nova pergunta ou você pode expandir sua resposta?
PJ Brunet
5

Desde o WordPress 3.7 (outubro de 2013) , os resultados da pesquisa são classificados pelos seguintes critérios (consulte o ticket 7394 ):

  • Correspondências de frases completas nos títulos das postagens.
  • Todos os termos de pesquisa nos títulos das postagens.
  • Qualquer termo de pesquisa nos títulos das postagens.
  • Correspondências de frases completas no conteúdo da postagem.

Cada seção e todas as postagens restantes são classificadas por data.

Existem também novos filtros:

  • wp_search_stopwords, para filtrar palavras de interrupção ignoradas WHERE.
  • posts_search_orderby, para filtrar o ORDER BYpedido de resultados da pesquisa.
fuxia
fonte