2012-07-28 18 views
6

Estoy tratando de usar la capacidad de búsqueda de texto completo de Sphinx para mi servidor MySQL. He configurado un servicio Sphinx local basado en el manual de instalación y puedo realizar búsquedas de texto.Integración de Sphinx a MySQL

puedo conectar a

mysql.exe --host=127.0.0.1 port=9306 

Donde el puerto 9306 es el puerto configurado en sphinx.conf:

searchd { 
... 
listen = 9306:mysql41 
... 
} 

Y NO SphinxQL consultas. Estoy usando la base de datos de ejemplo predeterminada de Sphinx enviada con el paquete de lanzamiento.

Sin embargo, me quieren integrarse Esfinge con mi servidor MySQL, de manera que todos los clientes que se conectan a mi servidor SQL puede hacer SphinxQL y quiero probarlo con la base de datos MySQL de muestra sakila

  • ¿Cuáles son los pasos para lograr eso?
  • ¿Debo convertir el motor de la base de datos de InnoDB a Sphinx?
  • Además, por lo que parece, Sphinx solo puede indexar una (1) base de datos tabla por configuración, ¿cómo puedo asegurarme de que todas las tablas en la base de datos MySQL sean indexadas?

Respuesta

12

Sin embargo, me quieren integrarse Esfinge con mi servidor MySQL, de manera que todos los clientes que se conectan a mi servidor SQL pueden hacer SphinxQL

No se puede hacer eso. Sphinx (cuando está habilitado para sphinxQL) solo le proporciona un servidor que parece como un mysql, es decir, usa el mismo protocolo de comunicaciones, principalmente para reutilizar las bibliotecas de cliente de mysql, en lugar de tener que crear una nueva solo para sphinx.

Son diferentes 'servidores'. Se conecta a un servidor mysql para ejecutar comandos mysql; te conectas al servidor de sphinx para ejecutar los comandos de sphinxQL.

La aplicación no tendrá que conectarse a cada 'servidor' por separado. Imagínate que la esfinge era algo así como postgres, claramente no te conectas a mysql y esperas poder ejecutar postgresql.

Sin embargo, existe SphinxSE, que es un motor de almacenamiento falso de MySQL. Lo instala en mysql, y luego puede crear una tabla con este motor. A continuación, ejecuta consultas mysql en esta tabla, debajo del capó hay contactos que ejecutan sphinx-server. Entonces, para mysql parece una tabla que contiene datos, esto es más útil porque puede 'unirse' a esta tabla de búsqueda con la tabla de datos original para obtener resultados y los datos originales en una consulta de MySQL.

La aplicación no necesita conectarse a la propia sphinx. SphinxSE lo hace por ti.

http://sphinxsearch.com/docs/current.html#sphinxse

¿Es necesario para convertir el motor de base de datos de InnoDB en Sphinx?

No.Mantiene los datos originales donde están, utilizando el motor que desee. Sphinx solo proporciona un 'índice' - no almacena los datos originales *. No es una base de datos como tal, solo proporciona búsquedas rápidas con su indexación altamente optimizada.

Básicamente le pides a sphinx los identificadores únicos de los documentos que coinciden con una consulta determinada. Luego use esos identificadores para buscar los datos. SphinxAPI, sphinxSE y sphinxQL son solo tres mecanismos diferentes para hacerlo.

También, de lo que parece, Sphinx sólo puede índice de uno (1) Tabla de base de datos por configuración,

No. Un ejemplo Sphinx solo puede alojar muchos índices. Y un índice puede tener muchas fuentes. Entonces, solo puede crear un índice por tabla. O si principalmente desea buscarlos juntos, puede simplemente crear un índice amalgamado.

- ** Editar responder a la pregunta en los comentarios: **

Cuando dice que, esfinge puede alojar muchos índices, ¿se basa únicamente en el fichero de configuración sphinx.conf?

Probablemente defina un índice de esfinge por tabla. Por lo tanto, necesitaría un par fuente/índice para cada tabla. (A menos que quiera índice de todas las tablas en un solo índice, whihch es posible también.

Linado leer las propias tablas, y crear el archivo de configuración, usted tiene que definir cada índice individual.

Cuando dice "le da un servidor que se parece a una mysql" qué se refiere como un proxy,

No. No es un proxy.

donde mi cliente de MySQL se puede conectar a este puerto un Sphinx d el cliente pensará que es un servidor MySQL?

Básicamente sí. El cliente se conectará de la misma manera que se conecta a un servidor mysql.

Si es así, entonces ¿puedo ejecutar tanto las consultas SQL de MySQL como SphinxQL en la misma conexión?

No. Impossible. Conéctese a mysql-server, para ejecutar consultas de mysql. Conéctese a searchd para ejecutar consultas de sphinxQL.

Dos conexiones, una por servidor.

por qué mi MySQL Workbench no puede conectar con el puerto 9306,

No sabe. Podría ser un problema de firewall.

+0

Cuando dices eso, sphinx puede albergar muchos índices, ¿se basa únicamente en el archivo de configuración sphinx.conf? En realidad, necesito volver a formular mi pregunta, mi pregunta debería haber sido ¿es posible que sphinx indexe todas las tablas en un archivo db ?, en caso afirmativo, ¿qué modificar en el archivo de configuración? – xybrek

+0

Cuando dices "te da un servidor que parece uno mysql", ¿te refieres a un proxy, donde mi cliente MySQL se puede conectar a este puerto Sphinx y el cliente pensará que es un servidor MySQL? Si es así, ¿puedo ejecutar tanto las consultas SQL de MySQL como SphinxQL en la misma conexión? Si es así, ¿por qué MySQL Workbench no se puede conectar al puerto 9306, cuando se puede conectar al puerto 3306 (puerto MySQL predeterminado)? – xybrek

+0

respondió a preguntas adicionales en una edición de la respuesta ... – barryhunter