¿Programando un buscador en su sitio web? Te va a interesar Sphinx

Cuando se trata de búsquedas customizadas en un sitio web, lo principal es que los resultados sean tan precisos como sea posible. Para esto podemos utilizar técnicas como las sugerencias de búsqueda o búsquedas semánticas. Sin embargo, dada la competitividad de la web existe un parámetro más, vital para un sistema de búsqueda web: la velocidad.

Existen diversas técnicas que permiten acelerar las búsquedas en una página web. Antes de escoger alguna técnica para acelerar las búsquedas, es necesario identificar cual es el balance costo/beneficio que podemos obtener de esta.

El propósito de este artículo es presentar a Sphinx como una excelente técnica de aceleración de búsquedas, a la vez que resume su integración en un sistema y analiza en cuales ambientes se podría podría obtener mayor ventaja.

Sphinx

Sphinx es un servidor de búsqueda de texto completo (Full Text Search). Sphinx LogoEsto significa que se conecta con el repositorio de datos y crea índices textuales, los cuales son consultados en cada búsqueda, en lugar de ir hasta el repositorio de datos. Las búsquedas indexadas de Sphinx pueden resultar hasta 50% más rápidas que una búsqueda común en un repositorio Claro que este resultado varía dependiendo de la potencia del servidor y del tamaño del conjunto de índices (en adelante: colección) que se indexa.

Es importante aclarar que Sphinx funciona con las base de datos comunes al desarrollo web (SQL Server, MYSQL, Oracle, PostgreSQL, etc…), pero también con colecciones de documentos o cualquier objeto que pueda ser indexado textualmente, desde archivos de texto simples hasta pdfs.

Compañías tan importantes como WordPress y Mozilla lo están utilizando actualmente.

Benchmarks

Veamos la siguiente tabla comparativa entre Sphinx y Mysql (tomada del blog oficial de Sphinx).

N

Consulta

Resultados de MySQL

Tiempo

Resultados de Sphinx

Tiempo

k

1

min(a)

2244

0.39s

2244

0.08s

4.9x

2

min(a+b*c)

790494849806

0.45s

309

0.09s

5.0x

3

min(bigint(a)+b*c)

790494849806

0.45s

790494849806

0.11s

4.1x

4

sum(sin(a+b+c))

-695.3422782..

0.50s

765.542419

0.17s

2.9x

5

max(a+b*2-c/3*4+5+6+7+8+9)

6404668209

1.42s

6404668416

0.14s

10.1x

6

max(a+b*2-c*4/3+35)

6404668209

1.05s

6404668416

0.14s

7.5x

7

max(a+b*2-c*1.333333333+35)

6404668209.003..

0.84s

6404668416

0.14s

6.0x

8

max(a+b*2-idiv(bigint(c),3)*4+5+6+7+8+9)

6404668209

1.42s

6404668209

0.14s

10.1x

9

avg(a*b/c/1/2/3/4)

326342841.944..

2.55s

326041280.000

0.13s

19.6x

Page 1 of 4 | Next page