WordPress-Volltextsuche mit ElasticSearch

WordPress ist eine großartige Software: Es gibt Millionen von Websites, obwohl die Suchfunktion nicht so leistungsfähig ist wie sie könnte. Tatsächlich verwendet Automattic selbst eine andere Lösung für die Suche auf WordPress.com. Sehen Sie sich einen großartigen Blogbeitrag und eine Präsentation zum Thema Blogbeitrag und eine Präsentation zu Elasticsearch bei Automattic an.

Das WordPress-Suchproblem

Was ist los mit der WordPress-Suche? Einfach ausgedrückt, ist es eine naive Lösung mit einfacher MySQL-Abfrage zum Nachschlagen.

  • WordPress sortiert das Suchergebnis nach dem Alter des Beitrags und nicht nach der Relevanz des Ergebnisses für den Suchbegriff.
  • Die Suche ist nur eine Kombination aus MÖGEN, mit %Abfrage% Das bedeutet, dass kein Index verwendet wird. Ohne Indizierung kann Ihre Datenbank auf einer stark frequentierten Site schnell zerstört werden, wenn Sie viel suchen.
  • Es sucht nach dem genauen Satz. Wenn ich nach "zsh on arch linux" suche, gibt WordPress null Ergebnisse zurück, obwohl Sie viele Einträge haben, die diese Wörter enthalten. Sie erwarten normalerweise nicht, dass ein Benutzer eine exakte Phrase eingibt, oder??
  • Es unterstützt keine unscharfe Suche. Wenn Benutzer einen Tippfehler machen, haben sie keine Chance, ein erwartetes Ergebnis zu erhalten.

Stellen wir uns eine Lyrik-Site vor, auf der sich Benutzer an mehrere Wörter des Songs erinnern können und die Texte eines ganzen Songs finden möchten. Um dies komplexer zu gestalten, lassen Sie uns sagen, dass Benutzer möglicherweise kein englischer Sprecher sind und versuchen, ein englisches Lied zu finden. Sie machen sehr wahrscheinlich Tippfehler, wenn sie Englisch eingeben, und ohne unscharfe Suche verlieren wir diese Benutzer.

Wir werden diese Probleme überwinden, indem wir eine Suchmaschine verwenden, um unsere Daten zu indizieren und zu durchsuchen. Wir können uns die MySQL-Volltextsuche oder ähnliches vorstellen. Obwohl es möglich ist, ist es möglicherweise nicht die beste Lösung. Sie müssen ein Schema definieren, Sie müssen die Standard-WordPress-Datenbank ändern, Indizes hinzufügen usw..

Wenn Sie eine große Tabelle erneut indizieren möchten, können Sie eine Sperre einführen und verhindern, dass die Site einen neuen Beitrag oder eine neue Übergabe akzeptiert. Darüber hinaus ist dies immer noch ein Hit für Ihre MySQL-Datenbank. In stark frequentierten Websites mit vielen Suchergebnissen kann die Datenbank verlangsamt werden. Wenn Sie ein Produkt wie ElasticSearch verwenden, beseitigen Sie diese Dinge. Es ist schnell, effizient, optimiert für die Suche mit vielen zusätzlichen Funktionen und es ist sogar schemalos, dh Sie können Felder problemlos hinzufügen und entfernen.

In diesem Lernprogramm werden die folgenden zwei Schritte beschrieben:

  1. ElasticSearch einrichten.
  2. Konfigurieren Sie ein Plugin, um die Daten in ElasticSearch zu indizieren, und durchsuchen Sie sie.

Das Gute ist, dass das Plugin auf die Standard-WordPress-Suche zurückgreift, wenn der ElasticSearch-Server ausfällt.

Bedarf

Sie müssen ein VPS verwenden, um eine Suchmaschine darauf zu installieren. Wenn Sie einen normalen Shared-Hosting-Dienst verwenden, können Sie OpenShift als alternativen Server verwenden, um später unsere Suchmaschine zu installieren.

Die Schönheit von ElasticSearch

ElasticSearch ist eine flexible und leistungsstarke, verteilte Echtzeit-Such- und Analyse-Engine. Sie können die Daten hineinschicken und sie schnell indexieren und für die Suche verfügbar machen. Es ist stark optimiert für seine Aufgabe: Suchen. Darüber hinaus enthalten die Ergebnisse einen Wert, wie gut die Daten mit dem Suchbegriff übereinstimmen. ElasticSearch verfügt sogar über eine REST-API, mit der Sie während des Testens / der Entwicklung mit einem Tool wie Sense die Suche leicht abfragen oder damit spielen können.

Überprüfen Sie die Homepage, wenn Sie mehr darüber erfahren möchten. Ihre Website ist ausführlich dokumentiert. Weitere Informationen finden Sie auf der Seite zum Stapelüberlauf.

1. Installation von ElasticSearch auf Ihrem Server

Abhängig von Ihrer Linux-Distribution müssen Sie möglicherweise die Dokumentation dazu lesen, um zu erfahren, wie Sie ElasticSearch installieren. Alternativ können Sie das generische Tutorial von ElasticSearch verfolgen.

Ubuntu / Debian (oder APT-basierte Distributionen)

$ wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add - $ sudo sh -c 'echo "deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main"> /etc/apt/sources.list' $ sudo apt-get update # We Sie brauchen Java für ElasticSearch. $ sudo apt-get install openjdk-7-jre-headless -y $ sudo apt-get install elasticsearch # Elasticsearch ausführen, wenn Sie $ sudo update-rc.d starten. elasticsearch default 95 10 $ sudo / etc / init. d / elasticsearch start

Centos / RedHat (oder YUM-basierte Distributionen)

$ rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch$ vim /etc/yum.repos.d/elastic.repo

Fügen Sie nach der Installation diese in die ElasticSearch-Konfigurationsdatei ein:

[elasticsearch-1.1] name = Elasticsearch-Repository für 1.1.x packagesbaseurl = http: //packages.elasticsearch.org/elasticsearch/1.1/centosgpgcheck=1gpgkey=http: //packages.elasticsearch.org/GPG-KEY-elasticsearchenabled=1

Speicher die Datei. Und weiter mit installieren yum. Beachten Sie, dass wir Java 6 von einem Drittanbieter-Repository installieren müssen, wenn Ihr CentOS-Repository nicht über Java 6 verfügt.

$ sudo yum install elasticsearch # Beim Start booten $ sudo / sbin / chkconfig --add elasticsearch # Wir benötigen Java6 + für ElasticSearch # Ignorieren Sie diesen Abschnitt, wenn Sie Java6 + $ sudo rpm --import http://apt.sw.be hatten /RPM-GPG-KEY.dag.txt $ sudo wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm $ sudo rpm -Uhv rpmforge -release-0.5.2-2.el6.rf.x86_64.rpm $ sudo yum install java-1.6.0-openjdk.x86_64 -y # Starten Sie den Start des $ sudo-Dienstes 

Nach dem Start von ElasticSearch können Sie die ordnungsgemäße Funktion überprüfen, indem Sie Ihre Domäne unter Port 9200 als besuchen yourdomain.com:9200 im Browser oder durch Ausführen eines locken anfordern.

$ curl 127.0.0.1:9200 "ok": wahr, "status": 200, "name": "Jessica Jones", "version": "number": "0.90.7", "build_hash": "36897d07dadcb70886db7f149e645ed3d44eb5f2 "," build_timestamp ":" 2013-11-13T12: 06: 54Z "," build_snapshot ": false," lucene_version ":" 4.5.1 "," tagline ":" Sie wissen, für die Suche "

Wenn Sie nicht über ein VPS verfügen und es dennoch verwenden möchten, können Sie eine Plattform wie OpenShift verwenden, um ElasticSearch darauf zu installieren. Wenn Sie ElasticSearch auf Ihrem Server installiert haben, fahren Sie mit dem nächsten Abschnitt fort.

2. Installieren von ElasticSearch unter OpenShift

ElasticSearch kann einfach installiert werden, indem das Softwarepaket heruntergeladen und die Binärdatei ausgeführt wird. Java 6 ist die einzige Abhängigkeit, die es hat. OpenShift gibt uns einen virtuellen Server, auf dem wir unsere eigene Software installieren können.

Registrieren Sie sich unter https://www.openshift.com/. Melden Sie sich als Nächstes in Ihrem Dashboard an, oder geben Sie nach dem Anmelden die URL https://openshift.redhat.com/app/console/applications ein. Klicken Sie auf "Anwendungen" und geben Sie "DIY" ein, um die Box zu filtern.

Klicken Sie dann auf den Titel "Do-It-Yourself 0.1", um die Anwendung Ihrem Konto hinzuzufügen. Dies bedeutet, dass wir die Anwendung selbst einrichten. Von hier aus haben Sie die Möglichkeit, Ihrer App einen Namen zu geben und eine ähnliche Subdomain zu erhalten appnamesubdomain.rhccloud.com. Warten Sie einen Moment, bis die Bereitstellung abgeschlossen ist. Klicken Sie anschließend auf "Weiter zur Seite" Anwendungsübersicht "", um zur Seite "Anwendungsübersicht" zu gelangen.

Auf dieser Seite wird der Domainname Ihrer Anwendung angezeigt. Wir werden es später benötigen, um die URL des ElasticSearch-Servers zu konfigurieren. Rechts unten sehen Sie den "Remote Access". Mit diesem Zugriff können wir den Shell-Befehl ausführen und installieren, genau wie bei einem normalen VPS. Wir sammeln SSH-Informationen für den Fernzugriff in unsere App und installieren ElasticSearch darauf.

Beachten Sie das ssh [email protected] Kommando, verwenden wir es für den Fernzugriff auf unseren Server unter OpenShift. diy-notyim.rhcloud.com ist Ihre Serveradresse, ssh ist der Befehl, den wir für den Fernzugriff verwenden.

Um sich über SSH anzumelden, müssen Sie Ihren öffentlichen Schlüssel an OpenShift übergeben. Klicke auf das Rahmen Registerkarte und klicken Sie dann auf Neuen Schlüssel hinzufügen…

Kopieren Sie einfach den Inhalt Ihres öffentlichen Schlüssels und fügen Sie ihn dort ein. Ihr öffentlicher Schlüssel ist normalerweise in ~ / .ssh / id_rsa.pub. Wenn Sie mit öffentlichen Schlüsseln nicht vertraut sind, lesen Sie diese Tutorials, um sie zu generieren:

  1. SSH-Schlüssel einrichten
  2. SSH: Was und wie

Wenn Sie Ihren Schlüssel auf der OpenShift-Website hinzugefügt haben, geben Sie diesen Befehl aus, um eine Verbindung herzustellen. Beachten Sie, dass sich Ihre Adresse von meiner unterscheidet.

ssh [email protected]
Sie werden mit einem Bildschirm wie diesem begrüßt:
 **************************************************** ******************** Sie greifen auf einen Dienst zu, der nur von autorisierten Benutzern verwendet werden darf. Wenn Sie keine Berechtigung haben, stellen Sie die Verwendung sofort ein. Jede Nutzung der Dienste unterliegt den anwendbaren Bedingungen der Vereinbarung, die unter folgender Adresse abgerufen werden kann: https://www.openshift.com/legal ******************** **************************************************** Willkommen bei der OpenShift-Shell Diese Shell unterstützt Sie bei der Verwaltung von OpenShift-Anwendungen. !!! WICHTIG !!! WICHTIG !!! WICHTIG !!! Der Shell-Zugriff ist recht mächtig und es ist möglich, dass Sie versehentlich Ihre Anwendung beschädigen. Gehen Sie vorsichtig vor! Wenn es schlimmer ist, zerstören Sie Ihre Anwendung mit "rhc app delete" und erstellen Sie sie neu !!! WICHTIG !!! WICHTIG !!! WICHTIG !!! Geben Sie "help" ein, um weitere Informationen zu erhalten. [diy-notyim.rhcloud.com 536ea3e4500446d9db000279] \>

Wir werden ElasticSearch manuell herunterladen und installieren. Die Download-Datei muss jedoch im Ordner gespeichert werden $ OPENSHIFT_DATA_DIR wegen seiner Persistenz zwischen der Bereitstellung. Während der Bereitstellung entfernt OpenShift fast alle Dateien und Ordner und verwendet die Build-Anweisung im Anwendungs-Hook, um Ihre Anwendung zu erstellen und bereitzustellen.

Beachten Sie, dass OpenShift über einen speziellen Ordner verfügt, in dem persistente Daten zwischen mehreren Implementierungen gespeichert werden. $ OPENSHIFT_DATA_DIR ist der Speicherpfad für Umgebungsvariablen. Führen Sie den folgenden Befehl aus, um ElasticSearch herunterzuladen, zu installieren und auszuführen.

$ cd $ OPENSHIFT_DATA_DIR $ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gz $ tar xvf elasticsearch-1.1.1.tar.gz $ cd elasticsearch-1.1.1 
Sobald Sie sich im Ordner befinden elasticsearch-1.1.1, Sie müssen die Schlüssel und Werte in der Datei ändern config / elasticsearch.yml. Sie können nano oder vi / vim verwenden, um die Datei zu bearbeiten und diese Werte zu bearbeiten
network.host: $ OPENSHIFT_DIY_IP transport.tcp.port: 3306 http.port: $ OPENSHIFT_DIY_PORT discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: []
Sobald Sie es bearbeiten und speichern. Starten Sie ElasticSearch.
# Stoppen Sie die Standard-DIY-App, um den Port freizugeben. $ Ctl_app stop $ bin / elasticsearch &
Warten Sie kurz, bis es startet. Von hier aus ist Ihre ElasticSearch-URL über die Domäne erreichbar, die wir zuvor eingerichtet haben. In meinem Fall ist es http://diy-notyim.rhccloud.com. Beachten Sie, dass wir den Standardport 9200 nicht verwenden, da OpenShift es uns nicht erlaubt, daran zu binden. Daher verwenden wir den Port 8080, der durch die Umgebungsvariable festgelegt wird $ OPENSHIFT_DIY_PORT. Wir binden nur für unsere interne IP-Adresse und OpenShift leitet an Port 80 die öffentliche IP-Adresse für uns weiter. Aus diesem Grund können Sie direkt auf die URL http://diy-notyim.rhccloud.com zugreifen, ohne einen Port anzugeben. Wir müssen auch die interne DIY-App mit stoppen ctl_app Halten Sie an, um den Port vor dem Ausführen freizugeben elasticsearch.Ausführen von ElasticSearch unter OpenShift, Bindung an Port 8080 anstelle von Port 9200

3. Einrichten des Plugins

Laden Sie das Plug-in herunter und installieren Sie es aus dem WordPress-Plugin-Repository. Extrahieren Sie es in die WP-Inhalt / Plugins Ordner und aktivieren Sie es. Oder wenn Sie verwenden wp-cli, es ist einfach wie ein Kuchen.

wp install fantastic-elasticsearch wp aktiviert fantastic-elasticsearch

Wenn Sie das WordPress-Dashboard neu laden, sollte ein neuer Menüpunkt für ElasticSearch angezeigt werden. Von hier aus konfigurieren wir es.

Die meisten Felder sind eindeutig beschrieben, um Sie beim Einrichten zu unterstützen. Nachfolgend einige Zusammenfassungen.

WordPress-Integration

Diese Registerkarte enthält die Einstellung zum Aktivieren von ElasticSearch oder nicht. Auf dieser Registerkarte können Sie auch auswählen, welche Kategorien in ElasticSearch enthalten sein sollen.

Server Einstellungen

Konfigurieren Sie den ElasticSearch-Server und den Indexnamen. Der Indexname entspricht dem Datenbanknamen in MySQL. Sie haben einen MySQL-Server und mehrere Datenbanken darin. Sie können einen beliebigen Namen verwenden, sofern er von einem anderen Dienst verwendet wird.

Wenn ElasticSearch auf demselben Computer installiert ist und die Standardeinstellung verwendet, können Sie den Servernamen leer lassen. Andernfalls geben Sie Ihre URL an. Wenn ich beispielsweise OpenShift wie beschrieben verwendet habe, würde ich http://diy-notyim.rhcloud.com/ als Server-URL eingeben.

Inhaltsindizierung

Sie können auswählen, welche Beitragstypen, Beitragsfelder oder Taxonomiefelder von ElasticSearch indiziert werden sollen. Sobald ein Artikel indiziert ist, kann er über ElasticSearch durchsucht werden. Sie können Beiträge, Seiten, benutzerdefinierte Felder oder jeden benutzerdefinierten Beitragstyp je nach Bedarf indizieren.

Ergebniswertung

Dies ist eine wichtige Sache, um das Ergebnis zu sortieren. Zum Beispiel kann eine Übereinstimmung im Posttitel als genauer betrachtet werden als eine Übereinstimmung im Postinhalt. Daher sollten wir einen Bewertungswert für den Post-Inhalt kleiner setzen. Wenn eine Tag-Übereinstimmung wertvoller ist als eine Übereinstimmung im Titel, setzen wir einen höheren Wert für post_tag.

Meine Score-Einstellung sollten Sie ändern und an Ihre eigenen Anforderungen anpassen

Unschärfe Präfix Länge

Dies bezieht sich auf die Anzahl der Zeichen, die ausgetauscht werden können, um Wörter zu finden. Zum Beispiel: Wenn ich gesucht habe Lonux, dann Linux ist immer noch eine Übereinstimmung: L (i) nux → L (o) nux. Je kleiner die Anzahl, desto besser die Leistung. Setze das nicht zu hoch. Ich denke, dass 0-2 am vernünftigsten sind.

Index verwalten

Sobald alles konfiguriert oder geändert wurde, ist es Zeit, die Änderung anzuwenden. Wenn Sie auf erneut indizieren klicken, sollte Folgendes angezeigt werden:

Nachdem die Indizierung abgeschlossen ist. Suchen Sie auf Ihrer Website nach etwas, suchen Sie nach einem Begriff und schalten Sie die Suche zwischen Standard und ElasticSearch ein / aus, um den Unterschied zu erkennen. Hier ist mein Suchergebnis mit der Standard-WordPress-Suche:

Kein Ergebnis bei der Suche von zsh arch linux mit Standardsuche

Hier ist das Suchergebnis mit ElasticSearch.

Ein Haufen Post mit ElasticSearch

Fazit

Mit wenigen einfachen Schritten haben wir eine leistungsstarke Suchmaschine für unsere Website eingerichtet. Je genauer das Suchergebnis ist, desto besser werden unsere Besucher sein. Wenn Ihre Site stark frequentiert ist und eine einzelne ElasticSearch-Installation die Suche nicht durchführen kann, können Sie ElasticSearch weitere Knoten hinzufügen, um eine verteilte Suche durchzuführen.

Beachten Sie, dass ElasticSearch standardmäßig nicht mit Authentifizierung ausgestattet ist. Sie sollten jedoch wahrscheinlich eine Firewall verwenden, um den Zugriff von öffentlichen IP-Adressen auf ElasticSearch zu beschränken. Oder vielleicht ist es besser, ElasticSearch an interne IP-Adressen zu binden und nur über LAN verfügbar zu machen.

Bitte hinterlassen Sie einen Kommentar und lassen Sie uns wissen, wie Ihre Site funktioniert, nachdem Sie dieses Plugin installiert haben.