Wie funktioniert die WordPress-Suche hinter den Kulissen?

11

Ich verwende die WordPress-Suche, um eine Reihe von benutzerdefinierten Beitragstypen zu durchsuchen und dem Benutzer einen Drilldown in jeden einzelnen Beitragstyp zu ermöglichen.

Ich stelle jedoch fest, dass WordPress nicht das zurückgibt, was ich für die "besten" Übereinstimmungen halte. Wenn ich beispielsweise nach Microsoft suche, werden Seiten, die den Begriff unregelmäßig enthalten, immer noch vor Seiten zurückgegeben, die den Begriff regelmäßig verwenden.

Grundsätzlich versuche ich einige Informationen darüber zu finden, wie WordPress Seiten ordnet und die Relevanz bestimmt und ob ich dies beeinflussen kann, ohne Plugins installieren zu müssen .

Jede Hilfe sehr geschätzt.

chrisd
quelle
2
Das ist eine schrecklich breite Frage für diese Site - lesen Sie die Abschnitte, was zu fragen ist und was nicht . Ich habe ein paar schnelle Google-Suchen durchgeführt und bin dabei auf Folgendes gestoßen : Machen Sie WordPress 'Search Suck Less weniger (es ist jedoch von '08, also YMMV). Was die Beeinflussung der Funktionalität ohne Plugins betrifft - Wenn Sie allergisch gegen die Plugins anderer sind, müssen Sie wahrscheinlich eines Ihrer eigenen schreiben. Plugins wirken sich einfach auf die Funktionsweise von WP aus, und genau das versuchen Sie zu tun. Richtig?
Pat J
1
Danke, es ist nicht so, dass ich die Verwendung der Plugins anderer nicht vermeiden möchte, sondern vielmehr die Tatsache, dass ich die Verbreitung von Plugins vermeiden möchte, dh "Oh, ich werde ein Plugin für dies und das haben" und bevor Sie es wissen, Sie haben 30 von ihnen am Laufen.
Chrisd
Ich verstehe und sympathisiere. Ich verwende eine Reihe von Plugins, habe aber einige davon geschrieben.
Pat J

Antworten:

10

BEARBEITEN - Die aktuelle Version von WordPress unterstützt Relevanz, daher ist diese Antwort nicht mehr korrekt.


Es gibt kein Konzept für Rang oder Relevanz, es ist nur eine einfache LIKE-Abfrage zum Titel und Inhalt des Beitrags:

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

Mit dem posts_searchFilter können Sie die Suchabfrage ändern oder vollständig durch Ihre eigene ersetzen. Von /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 ) );

Siehe auch die verfügbaren Abfragefilter auf der WP_QueryCodex-Seite .

Milo
quelle
4
Witzig sollte man sagen, dass… Nacin vor ungefähr einer Stunde Code festgeschrieben hat, um ihn nach Relevanz zu sortieren. Wahrscheinlich zur gleichen Zeit, als Sie Ihre Antwort geschrieben haben. :) core.trac.wordpress.org/changeset/25632
Dave Ross
Für große / beliebte Blogs ist das Durchsuchen des gesamten Inhalts ziemlich unrealistisch. Was ist der empfohlene Weg, um dies zu beschleunigen, ohne nur das "ODER (...)" aus query.php zu löschen? Soll ich eine neue Frage stellen oder können Sie Ihre Antwort erweitern?
PJ Brunet
5

Seit WordPress 3.7 (Oktober 2013) werden die Suchergebnisse nach folgenden Kriterien sortiert (siehe Ticket 7394 ):

  • Vollständige Satzübereinstimmungen in Post-Titeln.
  • Alle Suchbegriffe in Post-Titeln.
  • Alle Suchbegriffe in Post-Titeln.
  • Vollständige Satzübereinstimmungen im Beitragsinhalt.

Jeder Abschnitt und alle verbleibenden Beiträge werden dann nach Datum sortiert.

Es gibt auch neue Filter:

  • wp_search_stopwords, um Stoppwörter zu filtern, die in ignoriert werden WHERE.
  • posts_search_orderby, um die ORDER BYbei der Bestellung von Suchergebnissen zu filtern .
Fuxia
quelle