Saltar al contenido

Categoría: Planetas

Como indexar múltiples índices de Solr

Esta fue una tarea que me tocó realizar en mi trabajo, debido a la poca documentación existente (me parece incompleta o no explican bien) y lo que me costó, decidí realizar una breve guía de como instalar solr y configurar varios índices; con el fin de ayudar a otras personas con el mismo problema o no tienen posibilidad de documentarse en inglés.

Para quienes no conocen Solr, es un motor de búsqueda de código abierto escrito en Java para tener un mayor rendimiento en las búsquedas o consultas muy grandes, es recomendable usarlo al momento de tener consultas a base de datos con mucho tiempo para obtener resultados y que estos sean constantes, por nombrar un caso.

Como está hecho en Java y corre sobre plataforma web, es necesario tener instalado y configurado Tomcat en el servidor. En esta guía se asume eso, si no saben, pueden buscar tutoriales en Internet para ver como hacerlo para su Sistema Operativo. Además, para este ejemplo se va a realizar un indice de una consulta a un servidor SQL Server para traer los datos y crear un índice con ello.

Instalación de Solr

  1. Primero vamos a https://lucene.apache.org/solr/ y descargamos la versión zip y la descomprimen en una carpeta temporal.
  2. Dentro de la carpeta comprimida, entren a la carpeta dist y renombrar el archivo apache-solr-x.x.x.war a solr.war
  3. Luego copian ese archivo en la carpeta lib de Tomcat.
  4. Como en este ejemplo usamos SQL Server para traer los datos, descargamos el driver jdbc de Sql Server (o el correspondiente para su gestor de Base de Datos) y se copia dentro de la carpeta lib de Tomcat.

Registro de una WebApp

El siguiente paso es crear cada  instancia o aplicación web, por cada una de ellas se deben repetir los siguientes pasos:

  1. Desde la carpeta descomprimida en el paso 1 de la sección anterior (debería llamarse algo como apache-solr-x.x.x), copiar la carpeta example a la localidad deseada para guardar al configuración e indices (ejemplo /home/user/solr_indices ó C:\solr_indices)
  2. Ir a la carpeta /conf/Catalina/localhost dentro de Tomcat, allí crear un archivo .xml con el nombre de la aplicación (este nombre de la carpeta es el que saldrá en la URL) con el contenido a continuación, recuerden cambiar RUTA_TOMCAT por la ruta de instalación de Tomcat y RUTA_WEBAPP por la ruta de la carpeta creada en el paso anterior:
<Context docBase="RUTA_TOMCAT/lib/solr.war" debug="0" crossContext="true">
  <Environment type="java.lang.String" value="RUTA_WEBAPP" override="true" />
  <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="(127\.0\.0\.1)|(10\.2\.*)" />
</Context>

La cadena Valve, es opcional y sirve para restringir el acceso a la aplicación, en este caso permite acceso a la IP local y cualquiera de la red privada de clase A. El atributo allow (deny para denegar) permite expresiones regulares para las ips. Si desean bloquear nombres de dominio, usen RemoteHostValve.

Configuración de la WebApp con Solr

Les recuerdo, en este caso se estará usando SQL Server y se importarán los datos del indice desde una consulta al servidor de Base de Datos, si necesitan leer documentos XML u otra cosa, lean la wiki de Solr.

  1. Editar RUTA_WEBAPP/conf/solrconfig.xml y agregar el siguiente bloque:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">data-config.xml</str>;
  </lst>
</requestHandler>

Buscar en ese mismo archivo, la sección donde dice dataDir para renombrar el nombre de la carpeta donde se guardará el índice para evitar sobre-escritura por parte de los demás índices, sustituir NOMBRE_WEBAPP por el nombre de la aplicación:

<dataDir>${solr.data.dir:./solr/data-NOMBRE_WEBAPP}</dataDir>

Crear en la misma carpeta (RUTA_WEBAPP/conf/) un archivo con el nombre data-config.xml con el siguiente contenido, recuerden modificar las credenciales de la conexión de la base de datos por las usadas en su caso:

<dataConfig>
  <dataSource type="JdbcDataSource" name="solr"
driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://IP_SERVIDOR_BD;databaseName=NOMBRE_BD"
user="NOMBRE_USUARIO" password="CONTRASENA"/>
   <document name="NOMBRE_BUSQUEDA">
     <entity name="NOMBRE_BUSQUEDA" dataSource="NOMBRE_BUSQUEDA" query="SELECT id,content AS Txt FROM TableTest">
        <field column="id" name="DataID"/>
        <field column="Txt" name="Txt"/>
     </entity>
   </document>
</dataConfig>

En este paso se deben explicar algunas cosas, las cadenas dataSource,entity y document deben tener el atributo name, con ello Solr identifica esta fuente de datos con el indice, es recomendable usar el mismo para evitar problemas. La cadena entity debe tener el atributo dataSource, con el nombre de la fuente, con esto relaciona ambos. Ademas si observan la sentencia SQL, la misma devuelve 2 columnas: id y Txt (Txt la forzamos a llamarse así mediante AS), las cuales serán usadas para crear el índice, por ello se deben crear tantas etiquetas field como columnas tengamos en la consulta, el nombre es personal y no es obligatorio llamarlas como el nombre de la columna.

Editar el archivo schema.xml, buscar el bloque fieldsets por:

<fields>
  <field name="DataID" type="string" indexed="true" stored="true" />
  <field name="Txt" type="text" indexed="true" stored="true" />
</fields>
<uniqueKey>Txt</uniqueKey>

Aquí se coloca una cadena field por cada cadena declarada en el archivo del paso anterior, cabe destacar la importancia del atributo type, no entro en detalles pero en este mismo archivo pueden leer los existentes, por ejemplo, string no permite búsqueda parcial a diferencia de text, así que analicen los tipos necesarios para cada columna.

Deben reiniciar el servicio de Apache Tomcat con el fin de actualizar la información de la webapp y Solr pueda crear los índices.

Una vez realizado estos pasos, se puede proceder a indexar el contenido. Si desean agregar mas índices, repitan los pasos de Configuración de la Webapp con Solr, cambiando el nombre de la aplicación, carpeta donde almacenar los indices, nombre de consulta, entre otros.

Espero que esta guía les haya servido de gran ayuda.

Deja un comentario

Geohot corriendo su aplicación en un Playstation 3 con firmware 3.55

Hace unas horas el famoso hacker Geohot ha logrado ejecutar su propia aplicación en un Playstation con firmware 3.55, probando que al desarrollar una aplicación y firmandola con la llave que él mismo liberó, se puede ejecutar sin problemas. Además, por la versión del firmware demuestra la posibilidad de hacerlo en futuras versiones, el no uso de PsFreedom (solo sirve para firmware 3.40 para atrás) y sin modificar el firmware (no parcheó lvl2).

Luego de casi 5 años de haber salido al mercado el Playstation 3, al fin podemos ver la ejecución de aplicaciones en esa poderosa máquina. Quien sabe que futuras aplicaciones veremos realizada por la comunidad homebrew del PS3.

1 comentario

Explicación de la seguridad del Playstation 3 y demás consolas

El equipo de fail0verflow expuso en el pasado Chaos Communication Congress su charla 2010 Console Hacking, donde se explicó en detalle como funciona todo el sistema de seguridad del Playstation 3, revelando sus fallas y dejando en rídiculo a Sony por cometer un error muy estupido en el algoritmo para firmar ejecutables. Si son fanáticos de la criptografía o hacking, es una presentación que no se pueden perder por su genialidad para explicar el tema usando humor, hay algunas partes muy técnicas y requiere conocer de organización del computador pero el resto es entendible.

Y una pequeña prueba de GNU/Linux corriendo en un Playstation 3 Slim gracias a PSGroove.com

Con esto podemos concluir que ningún sistema de seguridad es perfecto, ya todas las consolas de la actual generación han sido hackeadas para tener control de su hardware y por último: «Jamás te metas con la comunidad hacker». Si Sony no hubiese removido la opción de usar Linux en su consola, no hubiese necesidad de explotar el sistema para ejecutar nuestras propias aplicaciones, asi que para la próxima no le ofrezcan una característica a los hackers y luego removerla.

Deja un comentario

¡Feliz navidad a todos mis lectores!

Bueno le deseo a todos mis lectores una feliz navidad (o cualquier fiesta que celebren hoy) y que disfruten muchisimo este día, por ello les dejo 2 comiquitas de XKCD sobre navidad, ambas me gustaron mucho y son muy geeks. Si no entienden, pueden buscar en internet sobre árboles binarios, estructura de pila y permisología en linux para comprender los chistes.

Santa y sudo

¡Feliz navidad a todos!

Deja un comentario