WordPress Full Text Search cu ElasticSearch

WordPress este o mare bucată de software: ea are puteri de milioane de site-uri, deși caracteristica de căutare nativă nu este la fel de puternic ca ar putea. De fapt, Automattic utilizează o altă soluție pentru căutare pe WordPress.com. Verificați un post de blog și o prezentare pe blog post și prezentare pe Elasticsearch la Automattic.

Problema de căutare WordPress

Ce este în neregulă cu căutarea în WordPress? Pur și simplu puneți-o, este o soluție naivă cu interogare simplă MySQL pentru a căuta.

  • WordPress sortează rezultatele căutării după vârsta postului, altele decât relevanța rezultatului pentru termenul de căutare.
  • Căutarea este doar o combinație de CA, cu % Interogare% adică nu se utilizează niciun indice. Fără indexare, vă puteți ucide rapid baza de date pe un site cu trafic ridicat, dacă aveți o mulțime de căutări.
  • Se caută fraza exactă. Dacă căut pentru "zsh on arch linux" WordPress returnează rezultate zero, chiar dacă aveți o mulțime de postări care conțin aceste cuvinte. De obicei, nu te aștepți ca un utilizator să introducă o expresie exactă, nu-i așa??
  • Nu acceptă căutarea fuzzy. Dacă utilizatorii fac o tipografie, nu au nici o șansă de a obține un rezultat așteptat.

Să ne gândim la un site liric unde utilizatorii își amintesc câteva cuvinte ale melodiei și doresc să găsească versurile unui întreg melodic. Pentru a face acest lucru mai complex, să presupunem că utilizatorii nu pot fi vorbitori de engleză și încearcă să găsească o melodie în limba engleză. Este foarte probabil ca aceștia să facă tipografie atunci când scriu în limba engleză și fără căutarea fuzzy le pierdem pe acei utilizatori.

Vom depăși aceste probleme utilizând un motor de căutare pentru indexarea și căutarea datelor noastre. Ne putem gândi să folosim MySQL Full Text Search sau ceva similar. În timp ce este posibil, este posibil să nu fie cea mai bună soluție. Trebuie să definiți o schemă, trebuie să modificați baza de date WordPress implicită, să adăugați indici și așa mai departe.

Când doriți să re-indexați o masă mare, este posibil să introduceți o blocare și să împiedicați site-ul să accepte un post sau o nouă prezentare. În plus, aceasta este încă o lovitură pentru baza de date MySQL. În site-ul cu trafic ridicat, cu multă căutare, acesta poate încetini baza de date. Când folosiți un produs ca ElasticSearch, eliminați aceste lucruri. Este rapid, eficient, optimizat pentru căutarea cu o mulțime de caracteristici suplimentare, și este chiar schematică mai puțin în sensul că puteți adăuga, eliminați cu ușurință câmpurile.

În acest tutorial, vom trece peste următorii doi pași:

  1. Configurarea elasticSearch.
  2. Configurați un plugin pentru indexarea datelor în ElasticSearch și căutați-l.

Lucrul bun este că pluginul se va îndrepta spre căutare WordPress implicită dacă serverul ElasticSearch va cădea.

cerinţe

Trebuie să utilizați un VPS pentru a instala un motor de căutare pe el. Dacă utilizați un serviciu de găzduire partajat normal, puteți utiliza OpenShift ca server alternativ pentru a instala mai târziu motorul nostru de căutare.

Frumusețea cercetării elastice

ElasticSearch este un motor de cautare si analiza in timp real, flexibil si puternic. Puteți să trimiteți datele în el și să îl aveți indexat și să îl puteți găsi rapid pentru căutare. Este foarte optimizat pentru munca sa: Căutarea. Mai mult decât atât, rezultatele includ o valoare a bunei corelații a datelor cu termenul de căutare. ElasticSearch chiar vine cu un API REST vă permite să căutați cu ușurință căutare sau să jucați cu ea în timpul testelor / dezvoltării cu un instrument cum ar fi Sense.

Verificați pagina de pornire dacă doriți să aflați mai multe despre aceasta. Site-ul lor este documentat extensiv. Pentru îndrumări suplimentare, verificați pagina cu Prelungirea stivei.

1. Instalarea aplicației ElasticSearch pe serverul dvs.

În funcție de distribuția dvs. Linux, poate fi necesar să consultați documentația sa pentru a vedea cum să instalați ElasticSearch. Alternativ, puteți urma tutorialul generic al ElasticSearch.

Ubuntu / Debian (sau distribuții bazate pe APT)

$ 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 stabil principal"> /etc/apt/sources.list "$ sudo apt-get update # Noi nevoie de Java pentru ElasticSearch $ sudo apt-get instalare openjdk-7-jre-headless $ sudo apt-get instalare elasticsearch # executați elasticsearch la pornire $ sudo update-rc.d elasticsearch defaults 95 10 $ sudo / etc / init. d / pornire elastică

Centos / RedHat (sau Distribuții bazate pe YUM)

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

După instalare, plasați-o în fișierul de configurare ElasticSearch:

[elasticsearch-1.1] name = Depozit elasticsearch pentru pachetele 1.1.xbaseurl = http: //packages.elasticsearch.org/elasticsearch/1.1/centosgpgcheck=1gpgkey=http: //packages.elasticsearch.org/GPG-KEY-elasticsearchenabled=1

Salvați fișierul. Și continuați să instalați cu yum. Rețineți că trebuie să instalați Java 6 din depozit terță parte dacă repozitoriul dvs. CentOS nu are Java 6.

$ sudo yum install elasticsearch # Efectuați-l să ruleze atunci când boot $ sudo / sbin / chkconfig --add elasticsearch # Avem nevoie de Java6 + pentru ElasticSearch # Ignorați această secțiune dacă ați avea 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 instala java-1.6.0-openjdk.x86_64 -y # Începeți $ sudo serviciu elasticsearch start 

După ce ați început ElasticSearch, puteți confirma că funcționează corespunzător vizitând domeniul dvs. pe portul 9200 ca yourdomain.com:9200 în browser sau executând un răsuci cerere.

$ curl 127.0.0.1:9200 "ok": true, "status": 200, "nume": "Jessica Jones", "versiune": "number": "0.90.7", "build_hash": 36897d07dadcb70886db7f149e645ed3d44eb5f2 "," build_timestamp ":" 2013-11-13T12: 06: 54Z "," build_snapshot ": false," lucene_version ":" 4.5.1 "," slogan ":" Știți, pentru căutare "

Dacă nu aveți un VPS și doriți să îl utilizați, puteți utiliza o platformă ca OpenShift pentru a instala ElasticSearch pe ea. Dacă ați instalat ElasticSearch pe serverul dvs., treceți la secțiunea următoare.

2. Instalarea aplicației ElasticSearch pe OpenShift

ElasticSearch poate fi instalat cu ușurință prin descărcarea pachetului software și rularea binar. Java 6 este singura dependență pe care o are. OpenShift ne oferă un fel de server virtual pe care îl putem instala software-ul propriu.

Înregistrați-vă un cont la adresa https://www.openshift.com/. Apoi, conectați tabloul de bord sau introduceți această adresă URL https://openshift.redhat.com/app/console/applications după ce v-ați conectat. Faceți clic pe "Aplicații", tastați "DIY" pentru a filtra caseta.

Apoi faceți clic pe titlul "Do-It-Yourself 0.1" pentru a adăuga aplicația în contul dvs. Aceasta înseamnă că noi vom instala aplicația. De aici, veți avea opțiunea de a numi aplicația dvs. și de a obține un subdomeniu, cum ar fi appnamesubdomain.rhccloud.com. Așteptați un moment pentru finalizarea provizionării, apoi faceți clic pe "Continuați cu pagina de prezentare a aplicației" pentru a accesa pagina de prezentare a aplicației.

Pe pagina respectivă, veți vedea numele domeniului aplicației dvs. Vom avea nevoie ulterior pentru a configura adresa URL a serverului ElasticSearch. În partea dreaptă de jos, puteți vedea "Accesul la distanță". Cu acest acces, vom putea rula comanda shell și vom instala ceva la fel ca modul în care facem cu un VPS normal. Vom colecta informații SSH pentru a accesa de la distanță în aplicația noastră și vom instala ElasticSearch pe ea.

Rețineți ssh [email protected] comanda, îl vom folosi pentru a accesa serverul nostru de la distanță pe OpenShift. diy-notyim.rhcloud.com este adresa serverului dvs., ssh este comanda utilizată pentru accesul la distanță.

Pentru a vă conecta prin SSH, trebuie să oferiți cheia publică la OpenShift. Faceți clic pe reglaj și apoi faceți clic pe Adăugați o cheie nouă ...

Trebuie doar să copiați și să lipiți conținutul cheii publice în el. Cheia dvs. publică este, de obicei, în ~ / .Ssh / id_rsa.pub. Dacă nu sunteți familiarizați cu cheile publice, citiți aceste tutoriale despre cum să le generați:

  1. Configurarea tastelor SSH
  2. SSH: Ce și cum

După ce adăugați cheia pe site-ul Web OpenShift, lansați această comandă pentru a vă conecta la ea. Rețineți că adresa dvs. va fi diferită de a mea.

ssh [email protected]
Veți fi întâmpinat cu un ecran ca acesta:
 ************************************************** ******************* Accesați un serviciu care este destinat utilizării numai a utilizatorilor autorizați. Dacă nu aveți autorizație, întrerupeți utilizarea imediat. Orice utilizare a serviciilor se supune termenilor aplicabili acordului care pot fi găsiți la: https://www.openshift.com/legal ******************* ************************************************** Bine ați venit la shell-ul OpenShift Acest shell vă va ajuta să gestionați aplicațiile OpenShift. !!! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!! Accesul Shell este destul de puternic și vă este posibil să vă deteriora accidental cererea. Continuați cu grijă! Dacă rău este cel mai rău, distrugeți aplicația cu "rhc app delete" și recreați-o! IMPORTANT !!! IMPORTANT !!! IMPORTANT !!! Introduceți "ajutor" pentru mai multe informații. [diy-notyim.rhcloud.com 536ea3e4500446d9db000279] \>

Vom descărca și instala ElasticSearch manual. Cu toate acestea, trebuie să stocăm fișierul de descărcare în dosar $ OPENSHIFT_DATA_DIR din cauza persistenței sale între desfășurare. În timpul desfășurării, OpenShift elimină aproape toate fișierele și folderele și utilizează instrucțiunea de construire din cârligul de aplicații pentru a construi și a implementa aplicația.

Rețineți că OpenShift are un folder special care este folosit pentru a stoca date persistente între mai multe implementări. $ OPENSHIFT_DATA_DIR este calea de stocare a variabilelor de mediu. Emiteți comanda de mai jos pentru a descărca, instala și a rula 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 
Odată ce vă aflați în dosar elasticsearch-1.1.1, trebuie să modificați cheile și valorile din fișier config / elasticsearch.yml. Puteți utiliza nano sau vi / vim pentru a edita fișierul și pentru a edita acea valoare
rețea.host: $ OPENSHIFT_DIY_IP transport.tcp.port: 3306 http.port: $ OPENSHIFT_DIY_PORT discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: []
După ce editați și salvați-l. Lansați ElasticSearch.
# Opriți aplicația DIY implicită pentru a elibera portul $ ctl_app stop $ bin / elasticsearch &
Așteptați o clipă pentru lansare. De aici, adresa dvs. ElasticSearch poate fi accesată prin intermediul domeniului pe care l-am configurat mai devreme. În cazul meu, este http://diy-notyim.rhccloud.com. Rețineți că nu folosim portul implicit 9200 deoarece OpenShift nu ne permite să ne angajăm; prin urmare, utilizăm portul 8080 care este setat de variabila de mediu $ OPENSHIFT_DIY_PORT. Ne legăm doar pentru IP-ul nostru intern, iar OpenShift va transmite la IP-ul public la portul 80 pentru noi. Din acest motiv, puteți accesa direct URL-ul http://diy-notyim.rhccloud.com fără a specifica niciun port. De asemenea, trebuie să oprim aplicația internă pentru DIY ctl_app opriți pentru a elibera portul înainte de a fi rulat elasticsearch.Rularea ElasticSearch pe OpenShift, legând portul 8080 în loc de portul 9200

3. Configurarea Plugin-ului

Descărcați și instalați pluginul de la depozitul de plugin-uri WordPress. Extrageți-l în wp-content / plugins folder și activați-l. Sau dacă utilizați wp-cli, este ușor ca plăcinta.

wp instalează fantastic-elasticsearch wp activa fantastic-elasticsearch

Reîncărcați tabloul de bord WordPress, ar trebui să apară un nou element de meniu pentru ElasticSearch. De aici, să o configuram.

Cele mai multe dintre câmpuri sunt descrise în mod clar pentru a vă ajuta să o configurați. Mai jos niște rezumate.

Integrare WordPress

Această filă conține setarea pentru a permite utilizarea ElasticSearch sau nu. Această filă ne permite, de asemenea, să selectăm categoriile care ar trebui să fie cuprinse în ElasticSearch.

Setări server

Configurați serverul ElasticSearch și numele indexului. Numele indexului este asemănător cu numele bazei de date din MySQL. Aveți un server MySQL și mai multe baze de date în interiorul acestuia. Puteți utiliza orice nume acolo, atâta timp cât este folosit de servicii diferite.

Dacă ElasticSearch este instalat pe aceeași mașină și utilizați setarea implicită, puteți lăsa numele serverului gol; în caz contrar, specificați-vă adresa URL. De exemplu, dacă am folosit OpenShift după cum am subliniat, aș introduce http://diy-notyim.rhcloud.com/ ca adresa URL a serverului.

Indexarea conținutului

Puteți alege câmpurile tip post, post câmp sau taxonomie care vor fi indexate de către ElasticSearch. Odată ce un element este indexat, acesta va putea fi căutat prin ElasticSearch. Puteți alege să indexați postări, pagini, câmpuri personalizate sau orice tip de post particularizat, în funcție de necesitățile dvs..

Scor de rezultat

Acesta este un lucru important pentru a sorta rezultatul. De exemplu, o potrivire în titlul postului poate fi considerată mai exactă decât o potrivire în conținutul postării. Prin urmare, ar trebui să setăm o valoare a scorului mai mică pentru conținutul postării. În mod similar, dacă o potrivire de etichete este mai valoroasă decât o potrivire în titlu, vom seta o valoare mai mare pentru post_tag.

Scorul meu, ar trebui să-l schimbați și să-l adoptați conform cerințelor dvs.

Lungimea Prefixului Fuzziness

Acest lucru se referă la numărul de caractere pot fi schimbate pentru a se potrivi cuvinte. De exemplu: dacă am căutat Lonux, atunci Linux se consideră încă un meci: L (i) nux-> L (o) nux. Cu cât numărul este mai mic, cu atât performanța este mai bună. Nu setați prea mult. Cred că 0-2 este cel mai rezonabil.

Gestionați indexul

După ce totul este configurat sau schimbat, este timpul să aplicați modificarea. Când faceți clic pe re-indexare, ar trebui să apară ceva ca mai jos:

După finalizarea indexării. Încercați să căutați ceva pe site-ul dvs., căutați o expresie, comutați între activarea / dezactivarea căutării și ElasticSearch pentru a vedea diferența. Aici este rezultatul meu de căutare cu căutare WordPress implicită:

Niciun rezultat la căutare zsh arch linux cu căutare implicită

Aici este rezultatul căutării cu ElasticSearch.

O grămadă de post cu ElasticSearch

Concluzie

Cu doar câțiva pași simpli, am creat un motor de căutare puternic pe site-ul nostru. Cu cât este mai exact rezultatul căutării, cu atât va fi mai bună experiența vizitatorilor noștri. Dacă site-ul dvs. are un trafic intens și o singură instalare ElasticSearch nu poate gestiona căutarea, puteți adăuga mai multe noduri la ElasticSearch pentru a face o căutare distribuită.

Rețineți că, în mod prestabilit, ElasticSearch nu vine cu autentificare, dar probabil că ar trebui să utilizați un firewall pentru a limita accesul la ElasticSearch din adrese IP publice. Sau poate o modalitate mai bună este de a lega ElasticSearch la IP intern și de al face disponibil doar prin LAN.

Vă rugăm să lăsați un comentariu și să ne comunicați cum funcționează site-ul dvs. după instalarea acestui plugin.

Cod