Además de responder las consultas de OP, permítanme presentar algunas ideas sobre Apache Solr, desde una simple introducción hasta una instalación e implementación detalladas .
Introducción simple
Cualquier persona que haya tenido experiencia con los motores de búsqueda anteriores u otros motores que no están en la lista, me encantaría conocer sus opiniones.
Solr no debe usarse para resolver problemas en tiempo real. Para los motores de búsqueda, Solr es prácticamente un juego y funciona perfectamente .
Solr funciona bien en aplicaciones web de alto tráfico ( leí en alguna parte que no es adecuado para esto, pero estoy respaldando esa declaración ). Utiliza la RAM, no la CPU.
- relevancia de resultados y clasificación
El impulso te ayuda a clasificar tus resultados en la parte superior. Por ejemplo, que está tratando de buscar un nombre de John en el campo Nombre y apellido , y quiere dar relevancia al primer nombre de campo, entonces usted necesita para impulsar el primer nombre de campo como se muestra.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Como se puede ver, apellido campo se impulsó hacia arriba con una puntuación de 2.
Más información sobre SolrRelevancy
- velocidad de búsqueda e indexación
La velocidad es increíblemente rápida y no hay compromiso en eso. La razón por la que me mudé a Solr .
Con respecto a la velocidad de indexación, Solr también puede manejar JOINS desde las tablas de su base de datos. Un JOIN más alto y complejo afecta la velocidad de indexación. Sin embargo, una enorme configuración de RAM puede abordar fácilmente esta situación.
Cuanto mayor sea la RAM, mayor será la velocidad de indexación de Solr.
- facilidad de uso y facilidad de integración con Django
Nunca intenté integrar Solr y Django , sin embargo, puedes lograr hacerlo con Haystack . Encontré un artículo interesante sobre el mismo y aquí está el github para ello.
- requisitos de recursos: el sitio estará alojado en un VPS, por lo que idealmente el motor de búsqueda no requeriría mucha RAM y CPU
Solr se reproduce en RAM, por lo que si la RAM es alta, no debe preocuparse por Solr .
El uso de RAM de Solr se dispara en la indexación completa si tiene unos mil millones de registros, podría hacer uso inteligente de las importaciones de Delta para hacer frente a esta situación. Como se explicó, Solr es solo una solución casi en tiempo real .
Solr es altamente escalable. Echa un vistazo a SolrCloud . Algunas características clave de la misma.
- Fragmentos (o fragmentación es el concepto de distribuir el índice entre varias máquinas, por ejemplo, si su índice ha crecido demasiado)
- Equilibrio de carga (si Solrj se usa con la nube Solr, automáticamente se encarga del equilibrio de carga utilizando su mecanismo Round-Robin)
- Búsqueda distribuida
- Alta disponibilidad
- características adicionales como "¿quiso decir?", búsquedas relacionadas, etc.
Para el escenario anterior, podría usar el SpellCheckComponent que está empaquetado con Solr . Hay muchas otras características, The SnowballPorterFilterFactory ayuda a recuperar registros, por ejemplo, si escribió, libros en lugar de libro , se le mostrarán los resultados relacionados con el libro .
Esta respuesta se centra ampliamente en Apache Solr y MySQL . Django está fuera de alcance.
Suponiendo que se encuentra en el entorno LINUX, puede continuar con este artículo. (la mía era una versión de Ubuntu 14.04)
Instalación detallada
Empezando
Descargue Apache Solr desde aquí . Esa sería la versión 4.8.1 . Podrías descargar nuevas versiones, encontré esto estable.
Después de descargar el archivo, extráigalo a la carpeta que elija. Di ... Downloads
o lo que sea ... Así se veráDownloads/solr-4.8.1/
En su solicitud .. Navegue dentro del directorio
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Entonces ahora estás aquí ...
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Inicie el servidor de aplicaciones Jetty
Jetty está disponible dentro de la carpeta de ejemplos del solr-4.8.1
directorio, así que navegue dentro de eso e inicie el servidor de aplicaciones Jetty.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Ahora, no cierre el terminal, minimícelo y déjelo a un lado.
(SUGERENCIA: Use & after start.jar para hacer que el servidor Jetty se ejecute en segundo plano)
Para verificar si Apache Solr se ejecuta correctamente, visite esta URL en el navegador. http: // localhost: 8983 / solr
Ejecución de Jetty en puerto personalizado
Se ejecuta en el puerto 8983 por defecto. Puede cambiar el puerto aquí o directamente dentro del jetty.xml
archivo.
java -Djetty.port=9091 -jar start.jar
Descargar el JConnector
Este archivo JAR actúa como un puente entre MySQL y JDBC. Descargue la versión independiente de la plataforma aquí.
Después de descargarlo, extraiga la carpeta y cópiela mysql-connector-java-5.1.31-bin.jar
y péguela en el directorio lib .
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Crear la tabla MySQL para vincular a Apache Solr
Para usar Solr , debe tener algunas tablas y datos para buscar. Para eso, usaremos MySQL para crear una tabla y presionar algunos nombres aleatorios y luego podríamos usar Solr para conectarnos a MySQL e indexar esa tabla y sus entradas.
Estructura 1.Table
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2.Popula la tabla anterior
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
Entrar en el núcleo y agregar las directivas lib
1.Navegar a
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2.Modificación del solrconfig.xml
Agregue estas dos directivas a este archivo.
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
Ahora agregue el DIH ( controlador de importación de datos)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3.Cree el archivo db-data-config.xml
Si el archivo existe, entonces ignore, agregue estas líneas a ese archivo. Como puede ver en la primera línea, debe proporcionar las credenciales de su base de datos MySQL . El nombre de la base de datos, nombre de usuario y contraseña.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(SUGERENCIA: puede tener cualquier número de entidades, pero tenga cuidado con el campo de identificación; si son iguales, se omitirá la indexación)
4.Modifique el archivo schema.xml
Agregue esto a su schema.xml como se muestra.
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
Implementación
Indexación
Aquí es donde está el verdadero negocio. Debe hacer la indexación de datos de MySQL a Solr para poder utilizar Solr Queries.
Paso 1: ve al panel de administración de Solr
Pulse la URL http: // localhost: 8983 / solr en su navegador. La pantalla se abre así.
Como lo indica el marcador, vaya al Registro para ver si alguna de las configuraciones anteriores ha provocado errores.
Paso 2: revisa tus registros
Ok, ahora estás aquí. Como puedes, hay muchos mensajes amarillos (ADVERTENCIAS). Asegúrese de no tener mensajes de error marcados en rojo. Anteriormente, en nuestra configuración habíamos agregado una consulta de selección en nuestro db-data-config.xml , digamos que si hubiera algún error en esa consulta, habría aparecido aquí.
Bien, sin errores. Estamos bien para irnos. Elija colección1 de la lista como se muestra y seleccione Importación de datos
Paso 3: DIH (controlador de importación de datos)
Con DIH, se conectará a MySQL desde Solr a través del archivo de configuración db-data-config.xml desde la interfaz de Solr y recuperará los 10 registros de la base de datos que se indexan en Solr .
Para hacerlo, elija la importación completa y marque las opciones Limpiar y confirmar . Ahora haga clic en Ejecutar como se muestra.
Alternativamente, también podría usar una consulta directa de importación completa como esta ...
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
Después de hacer clic en Ejecutar , Solr comienza a indexar los registros; si hubiera algún error, indicaría que la indexación ha fallado y debe volver a la sección Registro para ver qué ha fallado.
Suponiendo que no haya errores con esta configuración y si la indexación se completa con éxito, recibirá esta notificación.
Paso 4: Ejecución de consultas Solr
Parece que todo salió bien, ahora puede usar Solr Queries para consultar los datos que se indexaron. Haga clic en la consulta a la izquierda y luego presione el botón Ejecutar en la parte inferior.
Verá los registros indexados como se muestra.
La consulta Solr correspondiente para enumerar todos los registros es
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
Bueno, ahí van los 10 registros indexados. Digamos, solo necesitamos nombres que comiencen con Ja , en este caso, debe orientar el nombre de la columna solr_name
, por lo tanto, su consulta es así.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
Así es como escribes consultas Solr . Para leer más al respecto, consulte este hermoso artículo .