Búsqueda de texto completo de WordPress con ElasticSearch

WordPress es un gran software: funciona con millones de sitios web, aunque su función de búsqueda nativa no es tan potente como podría. De hecho, Automattic usa una solución diferente para buscar en WordPress.com. Vea una excelente publicación de blog y una presentación en una publicación de blog y una presentación sobre Elasticsearch en Automattic.

El problema de búsqueda de WordPress

¿Qué hay de malo en la búsqueda de WordPress? En pocas palabras, es una solución ingenua con una simple consulta de MySQL para buscar.

  • WordPress ordena el resultado de la búsqueda por la antigüedad de la publicación que no sea la relevancia del resultado para el término de búsqueda.
  • La búsqueda es sólo una combinación de ME GUSTA, con %consulta% lo que significa que no se utiliza ningún índice. Sin indexación, puede matar rápidamente su base de datos en un sitio de alto tráfico si tiene muchas búsquedas.
  • Busca la frase exacta. Si busco "zsh en arch linux", WordPress arroja resultados cero aunque tenga muchas publicaciones que contengan estas palabras. Por lo general, no espera que un usuario ingrese una frase exacta.?
  • No soporta la búsqueda difusa. Si los usuarios cometen un error tipográfico, no tienen ninguna posibilidad de obtener el resultado esperado..

Pensemos en un sitio de letras donde los usuarios puedan recordar varias palabras de la canción y quieran encontrar la letra de una canción completa. Para hacer esto más complejo, digamos que los usuarios pueden no ser anglófonos y están tratando de encontrar una canción en inglés. Es muy probable que cometan errores tipográficos al escribir en inglés, y sin una búsqueda aproximada, perdemos a esos usuarios..

Superaremos estos problemas utilizando un motor de búsqueda para indexar y buscar nuestros datos. Podemos pensar en usar MySQL Full Text Search o algo similar. Si bien es posible, puede que no sea la mejor solución. Debe definir un esquema, debe modificar la base de datos de WordPress predeterminada, agregar índices, etc..

Cuando desee volver a indexar una tabla grande, puede introducir un bloqueo y evitar que el sitio acepte una nueva publicación o envío. Además, eso sigue siendo un éxito para su base de datos MySQL. En un sitio de alto tráfico con mucha búsqueda, puede ralentizar la base de datos. Cuando usas un producto como ElasticSearch, eliminas esas cosas. Es rápido, eficiente, optimizado para la búsqueda con muchas funciones adicionales, e incluso tiene un esquema que significa que puede agregar, eliminar campos fácilmente.

En este tutorial, repasaremos los siguientes dos pasos:

  1. Configurando ElasticSearch.
  2. Configure un complemento para indexar los datos en ElasticSearch y búsquelo.

Lo bueno es que el complemento retrocederá a la búsqueda predeterminada de WordPress si el servidor ElasticSearch falla.

Requerimientos

Tienes que usar un VPS para instalar un motor de búsqueda en él. Si usa un servicio de alojamiento compartido normal, puede usar OpenShift como servidor alternativo para instalar nuestro motor de búsqueda más adelante..

La belleza de ElasticSearch

ElasticSearch es un motor de búsqueda y análisis en tiempo real, flexible, potente y distribuido. Puede enviar los datos en él, y tenerlo indexado y disponible para búsqueda rápidamente. Está altamente optimizado para su trabajo: la búsqueda. Más que eso, los resultados incluyen un valor de qué tan bien los datos coincidieron con el término de búsqueda. ElasticSearch incluso viene con una API REST que le permite consultar fácilmente la búsqueda o jugar con ella durante una prueba / desarrollo con una herramienta como Sense.

Verifique la página de inicio si desea obtener más información al respecto. Su sitio está ampliamente documentado. Para obtener orientación adicional, consulte la página en Desbordamiento de pila.

1. Instalar ElasticSearch en su servidor

Dependiendo de su distribución de Linux, es posible que deba consultar su documentación para ver cómo instalar ElasticSearch. Alternativamente, puedes seguir el tutorial genérico de ElasticSearch..

Ubuntu / Debian (o distribuciones basadas en 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 # Nosotros necesito Java para ElasticSearch $ sudo apt-get install openjdk-7-jre-headless -y $ sudo apt-get install elasticsearch # Ejecuta elasticsearch al arrancar $ sudo update-rc.d elasticsearch por defecto 95 10 $ sudo / etc / init. d / elasticsearch inicio

Centos / RedHat (o Distribuciones basadas en YUM)

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

Después de la instalación, coloque esto en el archivo de configuración ElasticSearch:

[elasticsearch-1.1] nombre = repositorio de Elasticsearch para 1.1.x packagesbaseurl = http: //packages.elasticsearch.org/elasticsearch/1.1/centosgpgcheck=1gpgkey=http: //packages.elasticsearch.org/GPG-KEY-elasticsearchenabled=1

Guarda el archivo. Y seguir instalando con ñam. Tenga en cuenta que tenemos que instalar Java 6 desde un repositorio de terceros si su repositorio de CentOS no tiene Java 6.

$ sudo yum install elasticsearch # Conviértalo en un motor al arrancar $ sudo / sbin / chkconfig --add elasticsearch # Necesitamos Java6 + para ElasticSearch # Ignore esta sección si tiene 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 # Start it $ sudo service elasticsearch start 

Después de iniciar ElasticSearch, puede confirmar que funciona correctamente visitando su dominio en el puerto 9200 como tudominio.com:9200 en el navegador o ejecutando un rizo solicitud.

$ curl 127.0.0.1:9200 "ok": verdadero, "estado": 200, "nombre": "Jessica Jones", "versión": "número": "0.90.7", "build_hash": "36897d07dadcb70886db7f149e645ed3d44eb5f2 "," build_timestamp ":" 2013-11-13T12: 06: 54Z "," build_snapshot ": false," lucene_version ":" 4.5.1 "," tagline ":" You know, for Search "

Si no tiene un VPS y aún desea usarlo, puede utilizar una plataforma como OpenShift para instalar ElasticSearch en él. Si instaló ElasticSearch en su servidor, pase a la siguiente sección.

2. Instalar ElasticSearch en OpenShift

ElasticSearch se puede instalar fácilmente descargando el paquete de software y ejecutando el binario. Java 6 es la única dependencia que tiene. OpenShift nos da una especie de servidor virtual en el que podemos instalar nuestro propio software.

Regístrese para obtener una cuenta en https://www.openshift.com/. A continuación, inicie sesión en su panel o ingrese esta URL https://openshift.redhat.com/app/console/applications después de iniciar sesión. Haga clic en "Aplicaciones", escriba 'DIY' para filtrar la casilla.

Luego haga clic en el título "Hágalo usted mismo 0.1" para agregar la aplicación a su cuenta. Esto significa que configuraremos la aplicación nosotros mismos. Desde aquí, tendrá la opción de nombrar su aplicación y obtener un subdominio como appnamesubdomain.rhccloud.com. Espere un momento hasta que finalice el suministro, luego haga clic en "Continuar en la página de descripción general de la aplicación" para ir a la página de descripción general de la aplicación.

En esa página, verá el nombre de dominio de su aplicación. Lo necesitaremos más adelante para configurar la URL del servidor ElasticSearch. En la parte inferior derecha, puede ver el "Acceso remoto". Con este acceso, podremos ejecutar el comando de shell e instalar la cosa como lo hacemos con un VPS normal. Recopilaremos información SSH para acceso remoto a nuestra aplicación e instalaremos ElasticSearch en ella..

Nota la ssh [email protected] comando, lo utilizaremos para acceder de forma remota a nuestro servidor en OpenShift. diy-notyim.rhcloud.com es su dirección de servidor, ssh es el comando que usamos para el acceso remoto.

Para iniciar sesión a través de SSH, debe proporcionar su clave pública a OpenShift. Haga clic en el Ajuste pestaña y luego haga clic en Añadir una nueva clave ...

Simplemente copie y pegue el contenido de su clave pública en él. Su clave púbica suele estar en ~ / .ssh / id_rsa.pub. Si no está familiarizado con las claves públicas, lea estos tutoriales sobre cómo generarlas:

  1. Configuración de claves SSH
  2. SSH: qué y cómo

Una vez que agregue su clave en el sitio web de OpenShift, emita este comando para conectarse a él. Tenga en cuenta que su dirección diferirá de la mía.

ssh [email protected]
Te daremos la bienvenida con una pantalla como esta:
 *************************************************** ******************* Está accediendo a un servicio que es para uso exclusivo de usuarios autorizados. Si no tiene autorización, deje de usarlo de inmediato. Cualquier uso de los servicios está sujeto a los términos aplicables del acuerdo que se pueden encontrar en: https://www.openshift.com/legal ******************* *************************************************** Bienvenido al shell de OpenShift Este shell le ayudará a administrar las aplicaciones de OpenShift. !!! IMPORTANTE !!! IMPORTANTE !!! IMPORTANTE !!! El acceso de Shell es bastante poderoso y es posible que dañe accidentalmente su aplicación. ¡Procede con cuidado! Si lo peor es peor, destruye tu aplicación con "rhc app delete" y ¡vuelve a crearla! IMPORTANTE !!! IMPORTANTE !!! IMPORTANTE !!! Escriba "ayuda" para más información. [diy-notyim.rhcloud.com 536ea3e4500446d9db000279] \>

Descargaremos e instalaremos ElasticSearch manualmente. Sin embargo, tenemos que almacenar el archivo de descarga en la carpeta. $ OPENSHIFT_DATA_DIR Debido a su persistencia entre el despliegue. Durante la implementación, OpenShift elimina casi todos los archivos y carpetas y usa la instrucción de compilación en el gancho de la aplicación para construir e implementar su aplicación..

Tenga en cuenta que OpenShift tiene una carpeta especial que se utiliza para almacenar datos persistentes entre múltiples implementaciones. $ OPENSHIFT_DATA_DIR Es la ruta de almacenamiento variable ambiental. Ejecute el siguiente comando para descargar, instalar y ejecutar 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 vez que estés dentro de la carpeta elasticsearch-1.1.1, Tienes que cambiar las claves y valores en el archivo. config / elasticsearch.yml. Puede usar nano o vi / vim para editar el archivo y editar esos valores
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 vez que lo edites y guardalo. Lanzar ElasticSearch.
# Detenga la aplicación DIY predeterminada para liberar el puerto $ ctl_app stop $ bin / elasticsearch &
Espera un momento para que se lance. Desde aquí, se puede acceder a su URL de ElasticSearch a través del dominio que configuramos anteriormente. En mi caso, es http://diy-notyim.rhccloud.com. Tenga en cuenta que no utilizamos el puerto predeterminado 9200 porque OpenShift no nos permite enlazarlo; Por lo tanto, usamos el puerto 8080 que está establecido por la variable ambiental $ OPENSHIFT_DIY_PORT. Solo nos comprometemos con nuestra IP interna, y OpenShift enviará a la IP pública en el puerto 80 para nosotros. Debido a eso, puede acceder directamente a la URL http://diy-notyim.rhccloud.com sin especificar ningún puerto. También tenemos que detener la aplicación interna de bricolaje con ctl_app parada para liberar el puerto antes de correr elasticsearch.Ejecutando ElasticSearch en OpenShift, enlazando en el puerto 8080 en lugar del puerto 9200

3. Configurando el complemento

Descargue e instale el complemento en el repositorio de complementos de WordPress. Extraerlo en el wp-content / plugins Carpeta y activarla. O si usas wp-cli, es tan fácil como un pastel.

wp instalar fantastic-elasticsearch wp activar fantastic-elasticsearch

Al recargar el panel de WordPress, debería aparecer un nuevo elemento de menú para ElasticSearch. Desde aquí, configurémoslo..

La mayoría de los campos se describen claramente para ayudarlo a configurarlo. A continuación se presentan algunos resúmenes.

Integración de WordPress

Esta pestaña contiene la configuración para habilitar el uso de ElasticSearch o no. Esta pestaña también nos permite seleccionar qué categorías deben incluirse en ElasticSearch.

Configuración del servidor

Configure el servidor de ElasticSearch y el nombre del índice. El nombre del índice es como el nombre de la base de datos en MySQL. Tienes un servidor MySQL y múltiples bases de datos dentro de él. Puede usar cualquier nombre allí siempre que sea utilizado por un servicio diferente.

Si ElasticSearch está instalado en la misma máquina y usa la configuración predeterminada, puede dejar el nombre del servidor vacío; de lo contrario, especifique su URL. Por ejemplo, si utilizara OpenShift como se describe, ingresaría http://diy-notyim.rhcloud.com/ como la URL del servidor.

Indización de contenido

Puede elegir qué tipo de publicación, campo de publicación o campo de taxonomía será indexado por ElasticSearch. Una vez que se indexa un artículo, se podrá buscar a través de ElasticSearch. Puede elegir indexar publicaciones, páginas, campos personalizados o cualquier tipo de publicación personalizada según sus necesidades..

Puntuación de resultados

Esto es una cosa importante para ordenar el resultado. Por ejemplo, una coincidencia en el título de la publicación puede considerarse más exacta que una coincidencia en el contenido de la publicación. Por lo tanto, debemos establecer un valor de puntuación más pequeño para el contenido de la publicación. De manera similar, si una coincidencia de etiqueta es más valiosa que una coincidencia en el título, estableceremos un valor más alto para post_tag.

Mi configuración de puntuación, debe cambiarla y adoptarla según sus propios requisitos.

Longitud de prefijo de borrosidad

Esto se refiere a la cantidad de caracteres que se pueden intercambiar para hacer coincidir palabras. Por ejemplo: si busqué Lonux, entonces Linux todavía se considera una coincidencia: L (i) nux-> L (o) nux. Cuanto menor sea el número, mejor será el rendimiento. No ponga esto demasiado alto. Creo que 0-2 son los más razonables..

Administrar índice

Una vez que todo está configurado o cambiado, es hora de aplicar el cambio. Cuando haces clic en volver a indexar, debería mostrar algo como a continuación:

Una vez finalizada la indexación. Intente buscar algo en su sitio, busque una frase, active / desactive la búsqueda entre el valor predeterminado y ElasticSearch para ver la diferencia. Aquí está mi resultado de búsqueda con la búsqueda de WordPress predeterminada:

No hay resultados cuando se busca zsh arch linux con búsqueda predeterminada

Aquí está el resultado de búsqueda con ElasticSearch.

Un montón de post con ElasticSearch

Conclusión

Con solo unos pocos pasos, hemos configurado un potente motor de búsqueda en nuestro sitio. Cuanto más preciso sea el resultado de la búsqueda, mejor será la experiencia que tendrán nuestros visitantes. Si su sitio tiene mucho tráfico y una única instalación de ElasticSearch no puede manejar la búsqueda, puede agregar más nodos a ElasticSearch para realizar una búsqueda distribuida.

Tenga en cuenta que, de forma predeterminada, ElasticSearch no viene con autenticación, pero probablemente debería usar un firewall para limitar el acceso a ElasticSearch desde direcciones IP públicas. O quizás una mejor manera es vincular ElasticSearch a la IP interna y hacer que esté disponible solo a través de LAN.

Deje un comentario y háganos saber cómo funciona su sitio después de instalar este complemento..