Ricerca full-text WordPress con ElasticSearch

WordPress è un ottimo software: alimenta milioni di siti Web anche se la sua funzione di ricerca nativa non è così potente come potrebbe. Infatti, Automattic utilizza una soluzione diversa per la ricerca su WordPress.com. Dai un'occhiata a un ottimo post sul blog e alla presentazione sul post del blog e alla presentazione su Elasticsearch di Automattic.

Il problema di ricerca di WordPress

Cosa c'è di sbagliato nella ricerca di WordPress? In poche parole, è una soluzione ingenua con una semplice query MySQL per la ricerca.

  • WordPress ordina il risultato della ricerca per l'età dei post diversa da quanto rilevante del risultato per il termine di ricerca.
  • La ricerca è solo una combinazione di PIACE, con %% Query significa che non viene utilizzato alcun indice. Senza indicizzazione, può rapidamente uccidere il tuo database su un sito ad alto traffico se hai un sacco di ricerche.
  • Cerca la frase esatta. Se cerco "zsh su arch linux", WordPress restituisce zero risultati anche se hai molti post che contengono queste parole. Di solito non ti aspetti che un utente inserisca una frase esatta, vero??
  • Non supporta la ricerca fuzzy. Se gli utenti fanno un refuso, non hanno alcuna possibilità di ottenere un risultato previsto.

Pensiamo a un sito lirico in cui gli utenti possono ricordare diverse parole della canzone e vogliono trovare i testi di un'intera canzone. Per rendere questo più complesso, diciamo che gli utenti potrebbero non essere un madrelingua inglese e stanno cercando di trovare una canzone inglese. È molto probabile che si commetta errori di battitura quando si digita in inglese e, senza una ricerca fuzzy, si perdono quegli utenti.

Supereremo questi problemi utilizzando un motore di ricerca per indicizzare e cercare i nostri dati. Possiamo pensare di usare MySQL Full Text Search o qualcosa di simile. Mentre è possibile, potrebbe non essere la soluzione migliore. Devi definire uno schema, devi modificare il database di WordPress predefinito, aggiungere indici e così via.

Quando si desidera reindicizzare una tabella grande, è possibile introdurre un blocco e impedire al sito di accettare un nuovo post o invio. Inoltre, è ancora un successo per il tuo database MySQL. Nel sito ad alto traffico con molte ricerche, può rallentare il database. Quando si utilizza un prodotto come ElasticSearch, si eliminano queste cose. È veloce, efficiente, ottimizzato per la ricerca con molte funzionalità extra ed è anche senza schemi che significa che è possibile aggiungere, rimuovere facilmente i campi.

In questo tutorial, andremo oltre i seguenti due passaggi:

  1. Impostazione di ElasticSearch.
  2. Configura un plug-in per indicizzare i dati in ElasticSearch e cercarli.

La cosa buona è che il plugin ricadrà alla ricerca WordPress predefinita se il server ElasticSearch non funziona.

Requisiti

Devi usare un VPS per installare un motore di ricerca su di esso. Se si utilizza un normale servizio di hosting condiviso, è possibile utilizzare OpenShift come server alternativo per installare il nostro motore di ricerca in un secondo momento.

La bellezza di ElasticSearch

ElasticSearch è un motore di ricerca e analisi flessibile, potente, distribuito e in tempo reale. È possibile inviare i dati in esso, e avere indice e disponibile per la ricerca rapidamente. È altamente ottimizzato per il suo lavoro: ricerca. Oltre a ciò, i risultati includono un valore di quanto i dati corrispondessero al termine di ricerca. ElasticSearch arriva anche con una API REST che ti permette di interrogare facilmente la ricerca o giocarci durante il test / sviluppo con uno strumento come Sense.

Vai alla pagina iniziale se vuoi saperne di più. Il loro sito è ampiamente documentato. Per ulteriori indicazioni, controlla la pagina su Stack Overflow.

1. Installazione di ElasticSearch sul tuo server

A seconda della distribuzione Linux, potrebbe essere necessario fare riferimento alla sua documentazione per vedere come installare ElasticSearch. In alternativa, puoi seguire il tutorial generico di ElasticSearch.

Ubuntu / Debian (o distribuzioni basate su 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 stable main"> /etc/apt/sources.list' $ sudo apt-get update # Noi bisogno di Java per ElasticSearch $ sudo apt-get install openjdk-7-jre-headless -y $ sudo apt-get install elasticsearch # Esegui elasticsearch all'avvio $ sudo update-rc.d elasticsearch defaults 95 10 $ sudo / etc / init. d / elasticsearch start

CentOS / RedHat (o distribuzioni basate su YUM)

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

Dopo l'installazione, inseriscilo nel file di configurazione ElasticSearch:

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

Salva il file. E continua a installare con yum. Si noti che dobbiamo installare Java 6 dal repository di terze parti se il repository CentOS non ha Java 6.

$ sudo yum install elasticsearch # Effettua il roon all'avvio $ sudo / sbin / chkconfig --add elasticsearch # Abbiamo bisogno di Java6 + per ElasticSearch # Ignora questa sezione se avevi 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 install java-1.6.0-openjdk.x86_64 -y # Avvia $ sudo service elasticsearch start 

Dopo aver avviato ElasticSearch, puoi verificare che funzioni correttamente visitando il tuo dominio sulla porta 9200 come yourdomain.com:9200 nel browser o eseguendo a arricciare richiesta.

$ curl 127.0.0.1:9200 "ok": true, "status": 200, "nome": "Jessica Jones", "versione": "numero": "0.90.7", "build_hash": "36897d07dadcb70886db7f149e645ed3d44eb5f2 "," build_timestamp ":" 2013-11-13T12: 06: 54Z "," build_snapshot ": false," lucene_version ":" 4.5.1 "," tagline ":" Sai, per la ricerca "

Se non si dispone di un VPS e si desidera ancora utilizzarlo, è possibile utilizzare una piattaforma come OpenShift per installare ElasticSearch su di esso. Se hai installato ElasticSearch sul tuo server, passa alla sezione successiva.

2. Installazione di ElasticSearch su OpenShift

ElasticSearch può essere installato facilmente tramite il download del pacchetto software e l'esecuzione del file binario. Java 6 è l'unica dipendenza che ha. OpenShift ci fornisce una sorta di server virtuale su cui possiamo installare il nostro software.

Registrati per un account su https://www.openshift.com/. Quindi, accedi alla tua dashboard o inserisci questo URL https://openshift.redhat.com/app/console/applications dopo aver effettuato l'accesso. Fai clic su "Applicazioni", digita "Fai da te" per filtrare la casella.

Quindi fai clic sul titolo "Fai da te 0.1" per aggiungere l'applicazione al tuo account. Ciò significa che configureremo noi stessi l'applicazione. Da qui, avrai la possibilità di nominare la tua app e ottenere un sottodominio come appnamesubdomain.rhccloud.com. Attendi un momento per il completamento del provisioning, quindi fai clic su "Continua alla pagina di panoramica dell'applicazione" per andare alla pagina di panoramica dell'applicazione.

In quella pagina, vedrai il nome di dominio della tua applicazione. Ci servirà in seguito per configurare l'URL del server ElasticSearch. In basso a destra, puoi vedere "Accesso remoto". Con questo accesso, saremo in grado di eseguire il comando shell e installare cosa proprio come facciamo con un normale VPS. Raccoglieremo le informazioni SSH per l'accesso remoto nella nostra app e installeremo ElasticSearch su di esso.

Notare la ssh [email protected] comando, lo useremo per l'accesso remoto al nostro server su OpenShift. diy-notyim.rhcloud.com è il tuo indirizzo del server, ssh è il comando che usiamo per l'accesso remoto.

Per accedere tramite SSH, devi fornire la tua chiave pubblica a OpenShift. Clicca sul Ambientazione scheda e quindi fare clic su Aggiungi una nuova chiave ...

Basta copiare e incollare il contenuto della tua chiave pubblica in esso. La tua chiave pubblica è di solito in ~ / .Ssh / id_rsa.pub. Se non hai familiarità con le chiavi pubbliche, leggi questi tutorial su come generarli:

  1. Impostazione dei tasti SSH
  2. SSH: cosa e come

Dopo aver aggiunto la chiave sul sito Web di OpenShift, emettere questo comando per connettersi al suo interno. Nota che il tuo indirizzo sarà diverso dal mio.

ssh [email protected]
Sarai accolto con una schermata come questa:
 ************************************************** ******************* Stai accedendo a un servizio che è destinato all'uso da parte di utenti autorizzati. Se non si dispone dell'autorizzazione, interrompere l'uso in una sola volta. Qualsiasi utilizzo dei servizi è soggetto ai termini applicabili dell'accordo che possono essere trovati su: https://www.openshift.com/legal ******************* ************************************************** Benvenuto nella shell di OpenShift Questa shell ti assisterà nella gestione delle applicazioni di OpenShift. !!! IMPORTANTE !!! IMPORTANTE !!! IMPORTANTE !!! L'accesso alla shell è piuttosto potente ed è possibile che tu accidentalmente danneggi la tua applicazione. Procedi con cura! Se la situazione peggiore dovesse peggiorare, distruggi la tua applicazione con "rhc app delete" e ricreala !!! IMPORTANTE !!! IMPORTANTE !!! IMPORTANTE !!! Digita "help" per maggiori informazioni. [diy-notyim.rhcloud.com 536ea3e4500446d9db000279] \>

Scaricheremo e installeremo ElasticSearch manualmente. Tuttavia, dobbiamo archiviare il file di download nella cartella $ OPENSHIFT_DATA_DIR a causa della sua persistenza tra la distribuzione. Durante l'implementazione, OpenShift rimuove quasi tutti i file e le cartelle e utilizza le istruzioni di build nel gancio dell'applicazione per creare e distribuire l'applicazione.

Si noti che OpenShift ha una cartella speciale che viene utilizzata per memorizzare dati persistenti tra più distribuzioni. $ OPENSHIFT_DATA_DIR è il percorso di memorizzazione delle variabili ambientali. Emettere sotto il comando per scaricare, installare ed eseguire 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 
Una volta che sei nella cartella elasticsearch-1.1.1, devi cambiare le chiavi e i valori nel file config / elasticsearch.yml. È possibile utilizzare nano o vi / vim per modificare il file e modificare tali valori
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: []
Una volta modificato e salvato. Avvia ElasticSearch.
# Interrompe l'app fai-da-te predefinita per rilasciare la porta $ ctl_app stop $ bin / elasticsearch &
Aspetta momentaneamente che si avvii. Da qui, il tuo URL ElasticSearch può essere raggiunto tramite il dominio che abbiamo impostato in precedenza. Nel mio caso, è http://diy-notyim.rhccloud.com. Si noti che non usiamo la porta predefinita 9200 perché OpenShift non ci consente di collegarci ad esso; quindi, usiamo la porta 8080 che è impostata dalla variabile ambientale $ OPENSHIFT_DIY_PORT. Ci leghiamo solo per il nostro IP interno e OpenShift inoltrerà l'IP pubblico alla porta 80 per noi. Per questo motivo, è possibile accedere direttamente all'URL http://diy-notyim.rhccloud.com senza specificare alcuna porta. Dobbiamo anche smettere di app interna fai da te con ctl_app fermarsi per rilasciare la porta prima di eseguire elasticsearch.Esecuzione di ElasticSearch su OpenShift, associazione alla porta 8080 anziché alla porta 9200

3. Configurazione del plugin

Scarica e installa il plug-in dal repository dei plugin di WordPress. Estrailo nel wp-content / plugins cartella e attivarlo. O se usi wp-cli, è facile come torta.

wp installa fantastic-elasticsearch wp attiva fantastic-elasticsearch

Ricaricando il dashboard di WordPress, dovrebbe apparire una nuova voce di menu per ElasticSearch. Da qui, configuriamolo.

La maggior parte dei campi sono descritti chiaramente per aiutarti a configurarlo. Di seguito sono riportati alcuni riepiloghi.

Integrazione con WordPress

Questa scheda contiene le impostazioni per abilitare l'uso di ElasticSearch o meno. Questa scheda ci consente anche di selezionare quali categorie devono essere contenute in ElasticSearch.

Impostazioni del server

Configura il server ElasticSearch e il nome dell'indice. Il nome dell'indice è come il nome del database in MySQL. Hai un server MySQL e più database al suo interno. È possibile utilizzare qualsiasi nome lì fino a quando viene utilizzato da un servizio diverso.

Se ElasticSearch è installato sulla stessa macchina e usa le impostazioni predefinite, è possibile lasciare vuoto il nome del server; altrimenti, specifica il tuo URL. Ad esempio, se avessi usato OpenShift come descritto, inserirò http://diy-notyim.rhcloud.com/ come URL del server.

Indicizzazione del contenuto

È possibile scegliere quali campi tipo, campo postale o campi tassonomia essere indicizzati da ElasticSearch. Una volta che un elemento è indicizzato, sarà ricercabile tramite ElasticSearch. Puoi scegliere di indicizzare post, pagine, campi personalizzati o qualsiasi tipo di post personalizzato in base alle tue esigenze.

Punteggio risultato

Questa è una cosa importante per ordinare il risultato. Ad esempio, una corrispondenza nel titolo del post può essere considerata più esatta di una corrispondenza nel contenuto del post. Pertanto dovremmo impostare un valore di punteggio più piccolo per i contenuti dei post. Allo stesso modo, se una corrispondenza del tag è più preziosa di una corrispondenza nel titolo, imposteremo un valore più alto per post_tag.

La mia impostazione del punteggio, dovresti cambiare e adottarla secondo le tue esigenze

Fuzziness Prefix Length

Questo si riferisce al numero di caratteri che possono essere scambiati per abbinare le parole. Ad esempio: se ho cercato Lonux, poi Linux si considera ancora una corrispondenza: L (i) nux-> L (o) nux. Più piccolo è il numero, migliore è la prestazione. Non impostare troppo alto. Penso che lo 0-2 sia il più ragionevole.

Gestisci indice

Una volta che tutto è configurato o modificato, è il momento di applicare la modifica. Quando fai clic su re-index, dovrebbe mostrare qualcosa come di seguito:

Al termine dell'indicizzazione. Prova a cercare qualcosa sul tuo sito, cerca una frase, attiva / disattiva la ricerca tra default e ElasticSearch per vedere la differenza. Ecco il risultato della mia ricerca con la ricerca WordPress predefinita:

Nessun risultato durante la ricerca di zsh arch linux con la ricerca predefinita

Ecco il risultato della ricerca con ElasticSearch.

Un sacco di post con ElasticSearch

Conclusione

Con pochi semplici passaggi, abbiamo installato un potente motore di ricerca sul nostro sito. Più accurato è il risultato della ricerca, migliore sarà l'esperienza dei nostri visitatori. Se il tuo sito ha un traffico intenso e una singola installazione di ElasticSearch non è in grado di gestire la ricerca, puoi aggiungere più nodi a ElasticSearch per eseguire una ricerca distribuita.

Nota che, per impostazione predefinita, ElasticSearch non viene fornito con l'autenticazione, ma probabilmente dovresti utilizzare un firewall per limitare l'accesso a ElasticSearch dagli indirizzi IP pubblici. O forse un modo migliore è quello di legare ElasticSearch all'IP interno e renderlo disponibile solo tramite LAN.

Per favore lascia un commento e facci sapere come funziona il tuo sito dopo aver installato questo plugin.