Jak działa wyszukiwanie WordPress za kulisami?

11

Korzystam z wyszukiwania WordPress, aby przeszukiwać szereg niestandardowych typów postów i pozwolić użytkownikowi na przejście do poszczególnych typów postów.

Jednak okazuje się, że WordPress nie zwraca najpierw tego, co uważam za „najlepsze” dopasowanie. Na przykład, jeśli szukam Microsoft, strony zawierające termin nieregularnie są nadal zwracane przed stronami, które regularnie używają tego terminu.

Zasadniczo próbuję znaleźć pewne informacje na temat tego, jak WordPress porządkuje strony i określa trafność oraz czy mogę na to wpłynąć bez konieczności instalowania jakichkolwiek wtyczek .

Każda pomoc bardzo doceniana.

chrisd
źródło
2
To okropne, szerokie pytanie dla tej witryny - zobacz sekcje, o co pytać i czego nie zadawać . Przeprowadziłem kilka szybkich wyszukiwań w Google i natknąłem się na to: Spraw, aby WordPress „Search Suck Less (pochodzi jednak z '08, więc YMMV). Jeśli chodzi o wpływanie na funkcjonalność bez wtyczek - jeśli masz alergię na wtyczki innych osób, prawdopodobnie będziesz musiał napisać własną. Wtyczki po prostu wpływają na funkcjonowanie WP i właśnie to próbujesz zrobić. Dobrze?
Pat J
1
Dzięki, nie chodzi o to, że nie chcę unikać używania wtyczek innych osób, a bardziej o to, że chcę uniknąć „rozlewania się wtyczek”, tj. „Och, będę mieć wtyczkę do tego i tamtego” i zanim się zorientujesz, masz ich 30.
chrisd
Rozumiem i współczuję. Korzystam z wielu wtyczek, ale napisałem ich sporo.
Pat J

Odpowiedzi:

10

EDYCJA - Obecna wersja WordPress obsługuje trafność, więc ta odpowiedź nie jest już dokładna.


Nie ma pojęcia rangi ani znaczenia, jest to po prostu LIKE zapytanie o tytuł i treść postu:

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

Możesz użyć posts_searchfiltru, aby zmodyfikować lub całkowicie zastąpić wyszukiwane hasło własnym. Od /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 ) );

Zobacz także dostępne filtry zapytań na stronie WP_QueryKodeksu .

Milo
źródło
4
Zabawne, że powinieneś powiedzieć, że… Nacin popełnił kod, aby posortować według trafności około godzinę temu. W rzeczywistości prawdopodobnie w tym samym czasie, kiedy pisałeś swoją odpowiedź. :) core.trac.wordpress.org/changeset/25632
Dave Ross
W przypadku dużych / popularnych blogów przeszukiwanie całej zawartości jest dość nierealne. Jaki jest zalecany sposób na przyspieszenie tego procesu bez usuwania „LUB (...)” z query.php? Czy mam przesłać nowe pytanie, czy możesz poszerzyć swoją odpowiedź?
PJ Brunet
5

Od WordPress 3.7 (październik 2013 r.) Wyniki wyszukiwania są sortowane według następujących kryteriów (patrz bilet 7394 ):

  • Pełne dopasowania zdań w tytułach postów.
  • Wszystkie wyszukiwane hasła w tytułach postów.
  • Wszelkie wyszukiwane hasła w tytułach postów.
  • Pełne dopasowania zdań w treści postu.

Każda sekcja i pozostałe posty są następnie sortowane według daty.

Istnieją również nowe filtry:

  • wp_search_stopwords, aby filtrować wyrazy ignorowane w WHERE.
  • posts_search_orderby, aby filtrować ORDER BYprzy zamawianiu wyników wyszukiwania.
fuxia
źródło