WordPress Fullt tekstsøk med ElasticSearch

WordPress er et flott stykke programvare: Det krever millioner av nettsteder, selv om den opprinnelige søkefunksjonen ikke er så kraftig som mulig. Faktisk bruker Automattic seg selv en annen løsning for søk på WordPress.com. Sjekk ut et flott blogginnlegg og presentasjon på blogginnlegg og presentasjon på Elasticsearch hos Automattic.

WordPress Search Problem

Hva er galt med WordPress-søk? Enkelt sagt, det er en naiv løsning med enkel MySQL spørring for oppslag.

  • WordPress sorterer søkeresultatet etter alder av innlegg annet enn det som er relevant for resultatet til søkeordet.
  • Søket er bare en kombinasjon av SOM, med %spørsmål% Det betyr at ingen indeks blir brukt. Uten indeksering kan det raskt drepe databasen din på et høyt trafikksted hvis du har mye søk.
  • Det ser etter den eksakte setningen. Hvis jeg søker etter "zsh på ark Linux", returnerer WordPress nullresultat selv om du har mange innlegg som inneholder disse ordene. Du forventer vanligvis ikke at en bruker skal skrive inn et eksakt uttrykk, gjør du?
  • Den støtter ikke fuzzy søk. Hvis brukerne skriver en skrivefeil, har de ingen sjanse til å få et forventet resultat.

La oss tenke på et lyrisk nettsted der brukere kan huske flere ord av sangen og vil finne teksten til en hel sang. For å gjøre dette mer komplekst, la oss si at brukere kanskje ikke er engelsktalende og prøver å finne en engelsk sang. De er svært sannsynlig å lage skrivefeil når du skriver engelsk, og uten fuzzy søk, mister vi disse brukerne.

Vi vil overvinne disse problemene ved å bruke en søkemotor til å indeksere og søke i våre data. Vi kan tenke på å bruke MySQL Full Text Search eller noe lignende. Mens det er mulig, kan det ikke være den beste løsningen. Du må definere et skjema, du må endre standard WordPress-databasen, legge til indekser og så videre.

Når du vil omregistrere et stort bord, kan du introdusere en lås, og forhindre at nettstedet aksepterer et nytt innlegg eller innlevering. Videre er det fortsatt en hit i MySQL-databasen. I trafikksted med mye søk kan det bremse databasen. Når du bruker et produkt som ElasticSearch, eliminerer du disse tingene. Det er raskt, effektivt, optimalisert for å søke med mange ekstra funksjoner, og det er enda skjema-mindre, noe som betyr at du kan legge til, fjerne felt lett.

I denne veiledningen vil vi gå over følgende to trinn:

  1. Sette opp ElasticSearch.
  2. Konfigurer et plugin for å indeksere dataene i ElasticSearch og søk det.

Det gode er at pluginet vil tilbakestille til standard WordPress-søk hvis ElasticSearch-serveren går ned.

Krav

Du må bruke en VPS til å installere en søkemotor på den. Hvis du bruker en vanlig delt hosting service, kan du bruke OpenShift som alternativ server for å installere vår søkemotor senere.

The Beauty of ElasticSearch

ElasticSearch er en fleksibel og kraftig, distribuert, sanntids søk og analysemotor. Du kan sende dataene inn i den, og få den indeksen og tilgjengelig for søk raskt. Den er svært optimalisert for jobben sin: Søker. Mer enn det, inkluderer resultatene en verdi av hvor god dataene samsvarer med søkeordet. ElasticSearch leveres selv med en REST API lar deg enkelt søke søk eller leke med det under testing / utvikling med et verktøy som Sense.

Sjekk ut hjemmesiden hvis du vil lære mer om det. Deres nettsted er dokumentert i stor utstrekning. For ytterligere veiledning, sjekk ut siden på Stack Overflow.

1. Installere ElasticSearch på serveren din

Avhengig av Linux-distribusjonen din, må du kanskje se dokumentasjonen for å se hvordan du installerer ElasticSearch. Alternativt kan du følge generisk veiledning av ElasticSearch.

Ubuntu / Debian (eller APT-baserte distribusjoner)

$ 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 oppdatering # Vi trenger Java for ElasticSearch $ sudo apt-install installjdk-7-jre-headless -y $ sudo apt-get install elasticsearch # Kjør elastisk søk ​​når du starter opp $ sudo update-rc.d elasticsearch standard 95 10 $ sudo / etc / init. d / elasticsearch start

Centos / RedHat (eller YUM-baserte distribusjoner)

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

Etter installasjon, plasser dette i konfigurasjonsfilen ElasticSearch:

[elasticsearch-1.1] name = Elasticsearch repository for 1.1.x packagesbaseurl = http: //packages.elasticsearch.org/elasticsearch/1.1/centosgpgcheck=1gpgkey=http: //packages.elasticsearch.org/GPG-KEY-elasticsearchenabled=1

Lagre filen. Og fortsett å installere med yum. Vær oppmerksom på at vi må installere Java 6 fra tredjepartsregistrering hvis CentOS-depotet ikke har Java 6.

$ sudo yum installer elasticsearch # Gjør det roon når du starter $ sudo / sbin / chkconfig - legg elasticsearch # Vi trenger Java6 + for ElasticSearch # Ignorer denne delen hvis du hadde Java6 + $ sudo rpm --import http://apt.sw.be /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 installere java-1.6.0-openjdk.x86_64 -y # Start det $ sudo service elasticsearch start 

Etter at du har startet ElasticSearch, kan du bekrefte at det fungerer riktig ved å besøke domenet ditt på port 9200 som yourdomain.com:9200 i nettleseren eller ved å utføre en curl be om.

$ curl 127.0.0.1:9200 "ok": true, "status": 200, "navn": "Jessica Jones", "versjon": "tall": "0.90.7", "build_hash": "36897d07dadcb70886db7f149e645ed3d44eb5f2 "," build_timestamp ":" 2013-11-13T12: 06: 54Z "," build_snapshot ": false," lucene_version ":" 4.5.1 "," tagline ":" Du vet, for søk "

Hvis du ikke har en VPS og fortsatt vil bruke den, kan du bruke en plattform som OpenShift for å installere ElasticSearch på den. Hvis du installerte ElasticSearch på serveren din, hopper du til neste avsnitt.

2. Installere ElasticSearch på OpenShift

ElasticSearch kan installeres enkelt ved å laste ned programvarepakken og kjøre binæret. Java 6 er den eneste avhengigheten den har. OpenShift gir oss en slags virtuell server som vi kan installere vår egen programvare på den.

Registrer deg for en konto på https://www.openshift.com/. Deretter logger du på dashbordet ditt, eller skriver inn denne nettadressen https://openshift.redhat.com/app/console/applications etter at du har logget inn. Klikk på "Programmer", skriv "DIY" for å filtrere boksen.

Klikk deretter på tittelen "Gjør-det-selv 0,1" for å legge til programmet på kontoen din. Dette betyr at vi vil sette opp applikasjonen selv. Herfra har du muligheten til å navngi appen din og få et underdomene som appnamesubdomain.rhccloud.com. Vent et øyeblikk for at provisjonen skal fullføres, og klikk deretter på "Fortsett til programoversiktssiden" for å gå til oversiktssiden for søknaden din.

På den siden vil du se domenenavnet på søknaden din. Vi trenger det senere for å konfigurere webadressen til ElasticSearch-serveren. Nederst til høyre kan du se "Fjerntilgang." Med denne tilgangen vil vi kunne kjøre shell kommandoen og installere ting akkurat som hvordan vi gjør med en vanlig VPS. Vi samler SSH-informasjon til ekstern tilgang til vår app og installerer ElasticSearch på den.

Legg merke til ssh [email protected] kommando, vil vi bruke den til ekstern tilgang til serveren vår på OpenShift. diy-notyim.rhcloud.com er serveradressen din, ssh er kommandoen vi bruker til ekstern tilgang.

For å logge inn via SSH, må du gi din offentlige nøkkel til OpenShift. Klikk på Innstilling og klikk deretter på Legg til en ny nøkkel ...

Bare kopier og lim inn innholdet på din offentlige nøkkel inn i den. Din pubic nøkkel er vanligvis i ~ / .Ssh / id_rsa.pub. Hvis du ikke er kjent med offentlige nøkler, les disse veiledningene om hvordan du genererer dem:

  1. Sette opp SSH-taster
  2. SSH: Hva og hvordan

Når du har lagt til nøkkelen på OpenShift-nettsiden, utsteder du denne kommandoen for å koble til den. Merk at adressen din vil avvike fra min.

ssh [email protected]
Du vil bli ønsket velkommen med en skjerm som dette:
 ************************************************** ******************* Du får tilgang til en tjeneste som kun brukes av autoriserte brukere. Hvis du ikke har autorisasjon, slutte å bruke på en gang. Enhver bruk av tjenestene er underlagt de gjeldende vilkårene i avtalen som finnes på: https://www.openshift.com/legal ******************* ************************************************** Velkommen til OpenShift-skallet Dette skallet hjelper deg med å administrere OpenShift-applikasjoner. !!! VIKTIG !!! VIKTIG !!! VIKTIG !!! Shell-tilgang er ganske kraftig, og det er mulig for deg å ved et uhell skade din søknad. Fortsett med forsiktighet! Hvis verre kommer verste, ødelegge søknaden din med "rhc app delete" og gjenskap det! VIKTIG !!! VIKTIG !!! VIKTIG !!! Skriv "hjelp" for mer info. [diy-notyim.rhcloud.com 536ea3e4500446d9db000279] \>

Vi laster ned og installerer ElasticSearch manuelt. Vi må imidlertid lagre nedlastingsfilen i mappen $ OPENSHIFT_DATA_DIR på grunn av sin vedholdenhet mellom distribusjon. Under distribusjon fjerner OpenShift nesten alle filene og mappene og bruker bygginstruksjonen i applikasjonshaken for å bygge og distribuere søknaden din.

Vær oppmerksom på at OpenShift har en spesiell mappe som brukes til å lagre vedvarende data mellom flere distribusjoner. $ OPENSHIFT_DATA_DIR er miljøvariabel lagringsbane. Utgave nedenfor kommando for å laste ned, installere og kjøre ElasticSearch.

$ 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 
Når du er inne i mappen elasticsearch-1.1.1, du må endre nøklene og verdiene i filen config / elasticsearch.yml. Du kan bruke nano eller vi / vim til å redigere filen og redigere den verdien
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: []
Når du redigerer og lagrer den. Start ElasticSearch.
# Stopp standard DIY app for å slippe port $ ctl_app stop $ bin / elasticsearch &
Vent øyeblikkelig for det å starte. Herfra kan din ElasticSearch-URL nås via det domenet vi har konfigurert tidligere. I mitt tilfelle er det http://diy-notyim.rhccloud.com. Vær oppmerksom på at vi ikke bruker standard port 9200 fordi OpenShift ikke tillater oss å binde seg til det; Derfor bruker vi port 8080 som er satt av miljøvariabelen $ OPENSHIFT_DIY_PORT. Vi binder bare for vår interne IP, og OpenShift vil videresende til offentlig IP på port 80 for oss. På grunn av det, kan du få tilgang til direkte URL http://diy-notyim.rhccloud.com uten å spesifisere noen port. Vi må også stoppe DIY intern app med ctl_app Stopp å slippe ut porten før du kjører elasticsearch.Kjører ElasticSearch på OpenShift, bindende på port 8080 i stedet for port 9200

3. Sette opp pluggen

Last ned og installer plugin på fra WordPress plugin repository. Trekk den ut i wp-innhold / tillegg mappe og aktiver den. Eller hvis du bruker wp-cli, det er lett som kake.

wp installere fantastisk-elasticsearch wp aktivere fantastisk-elasticsearch

Når du oppdaterer WordPress-dashbordet, bør det vises et nytt menyelement for ElasticSearch. Herfra, la oss konfigurere det.

De fleste feltene beskrives tydelig for å hjelpe deg med å sette opp det. Nedenfor er noen oppsummeringer.

WordPress Integration

Denne kategorien inneholder innstillingen for å aktivere bruk av ElasticSearch eller ikke. Denne kategorien lar oss også velge hvilke kategorier som skal finnes i ElasticSearch.

Serverinnstillinger

Konfigurer ElasticSearch-serveren og indeksnavnet. Indeksnavnet er som databasenavnet i MySQL. Du har en MySQL-server og flere databaser inni den. Du kan bruke noe navn der så lenge det brukes av annen tjeneste.

Hvis ElasticSearch er installert på samme maskin, og bruk standardinnstilling, kan du la servernavnet være tomt. ellers spesifiser nettadressen din. Hvis jeg for eksempel brukte OpenShift som beskrevet om, ville jeg skrive inn http://diy-notyim.rhcloud.com/ som serveradressen.

Innholdsindeksering

Du kan velge hvilke posttype, postfelt eller taksonomi som skal indekseres av ElasticSearch. Når et element er indeksert, blir det søkbart via ElasticSearch. Du kan velge å indeksere innlegg, sider, egendefinerte felt eller en egendefinert innleggstype avhengig av ditt behov.

Resultat Scoring

Dette er en viktig ting å sortere resultatet. For eksempel kan en kamp i posttittel betraktes som mer eksakt enn en kamp i innlegget innhold. Derfor bør vi sette en poengsum mindre for innleggets innhold. På samme måte, hvis en tag-kamp er mer verdifull enn en kamp i tittelen, vil vi sette en høyere verdi for post_tag.

Min score innstilling, du bør endre og vedta det til ditt eget krav

Fuzziness Prefix Length

Dette refererer til at antall tegn kan byttes ut for å matche ord. For eksempel: Hvis jeg søkte etter Lonux, deretter Linux vurderer fortsatt en kamp: L (i) nux-> L (o) nux. Jo mindre tallet, desto bedre ytelse. Ikke sett dette for høyt. Jeg tror at 0-2 er den mest fornuftige.

Administrer indeksen

Når alt er konfigurert eller endret, er det på tide å bruke endringen. Når du klikker på re-indeks, bør den vise noe som nedenfor:

Etter indeksering er ferdig. Prøv å søke etter noe på nettstedet ditt, søk etter en setning, bytt søket på / av mellom standard og ElasticSearch for å se forskjellen. Her er søkeresultatet mitt med standard WordPress-søk:

Ikke noe resultat når du søker zsh arch linux med standard søk

Her er søkeresultatet med ElasticSearch.

En gjeng med post med ElasticSearch

Konklusjon

Med bare noen få enkle trinn har vi satt opp en kraftig søkemotor til nettstedet vårt. Jo mer nøyaktig søkeresultatet er, jo bedre opplevelse våre besøkende vil ha. Hvis nettstedet ditt har tung trafikk, og en enkelt ElasticSearch-installasjon ikke klarer å håndtere søk, kan du legge til flere noder til ElasticSearch for å gjøre et distribuert søk.

Merk at ElasticSearch som standard ikke kommer med autentisering, men du bør sannsynligvis bruke en brannmur for å begrense tilgangen til ElasticSearch fra offentlige IP-adresser. Eller kanskje en bedre måte er å binde ElasticSearch til intern IP og gjøre den tilgjengelig kun via LAN.

Vennligst legg igjen kommentarer og gi oss beskjed om hvordan nettstedet ditt fungerer etter at du har installert dette plugin.