miércoles, 3 de julio de 2013

mnoGoSearch


mnoGoSearch, es uno de los tantos buscadores e indexadores mediocres que existen en el mundo del software libre. De los todos los que hay, es el que menos apesta.
Lo mas triste del caso, es que no está en los repositorios de debian, no se cual será el misterioso motivo por el que lo quitaron, para dejar hyperestraier.

Descarga el que más te acomode aquí yo prefiero usar el código fuente compilado, el mismo, cógelo aquí.

Puede usar mil y una base de datos, pero mejor compilamos la de sqlite3 nada más.
aptitude install libsqlite3-dev

Luego:

atool -x mnogosearch-3.3.12.tar.gz
cd mnogo-*
./configure --prefix=/opt/mnogosearch --with-sqlite3

Se manda a configurar y si NO te dio bateo, entonces... 

make install

La configuración... bueno, eso son otros $20. Por ejemplo, la conexión con la base de datos, es todo una ceremonia, que poco se parece a lo que dice en la documentación, ya que el mismo, no pincha como en el ejemplo.

En el fichero /opt/mnogosearch/etc/indexer.conf le pones esta linea para crear la conexión con la BD:



DBAddr sqlite3://mnogo:@/opt/mnogosearch/mnogosearch.db/?dbmode=blob&Deflate=yes&zint4=yes



También debes especificarle la conexión al buscador en el fichero:

/opt/mnogosearch/etc/search.htm

Fíjate que es diferente, el parámetro dbmode=blob tiene ahora:

LiveUpdates=yes

Esto quiere decir que la puntación de cada documento se actualiza cada vez que accedas a él.

DBAddr sqlite3://mnogo:@/opt/mnogosearch/mnogosearch.db/?dbmode=blob&LiveUpdates=yes&Deflate=yes&zint4=yes


Como todos los indexadores; tiene un crawler y un frontend web para buscar. Pero volviendo con el crawler en "indexer.conf".

A mi me gusta tener los tipos de ficheros aparte, ya que uso "varios crawler"; una configuración para la documentación de flash, otra para los correos, etc... pero lo mejor es tener los tipos de ficheros aparte y así funciona con todos. Entonces pones una linea que diga:

Include filetypes.conf

y en el fichero /opt/mnogosearch/etc/filetypes.conf vamos a poner una buena catatombe de cosas extrañas. Sería más fácil si manejas los conceptos de MIME type; y si conoces el fichero .mailcap entenderás todo facilito. Por tanto, te sugiero que veas por arribita "man mailcap" para que tengas una idea de como funciona el mime-type; también deberías mirar /etc/mailcap.

Aclaración para el que leyó man mailcap: La única diferencia es que aquí, la declaraciones de los tipos mime van por un lado, y el comando a ejecutar va por otro.

Te explico lo que vamos hacer. Aquí vamos a declarar que fichero se permiten o no, además que hacer con cada fichero, ya que mnogosearch solo entiende de texto plano o de html; por tanto, usaremos terceras aplicaciones que conviertan lo que queremos en HTML puro. Además, el fichero también controla que extensiones el crawler debe revisar y cuales debe ignorar. En adicción, la opción NoCase, hará que ignore su si extención es .EXT o .ext, a ambas las tomará por la misma, osea
obviando la maýuscula.
Allow */ *.html *.htm *.txt *.ps *.pdf NoCase
Allow *.1.gz *.2.gz *.3.gz *.4.gz *.5.gz *.6.gz *.7.gz *.8.gz NoCase
Disallow * 

Ahí dice, primero permitir los ficheros *.(véase arriba) y aunque la documentación dice que soporta expresiones regulares, la práctica demuestra lo contrario, por eso no puse *.[0-0].gz y tienes que hacer la pincha del indio poniendo número a número.

Ah! OJO, el primer Allow el el fichero "*/" osea, DIRECTORIOS, si no, el indexer NO pincha.

Ahora que tenemos declarado las extensiones de ficheros, vamos a decirle que hacer con cada uno de esos ficheros para traducirlos a HTML. Vamos a declarar el contenido mime según su extención.

# tipos de ficheros y extenciones
AddType text/plain          *.txt  *.pl *.js *.h *.c *.pm *.e .py *.sh NoCase
AddType text/html           *.html *.htm NoCase
AddType application/pdf         *.pdf
AddType application/msword     *.doc
AddType application/oasis-document *.odt
AddType application/man   *.1.gz *.2.gz *.3.gz *.4.gz *.5.gz *.6.gz *.7.gz *.8.gz NoCase

Vites? cargamos un tipo de mime y lo casamos con una extención, hemos declarado que los ficheros cuyo nombre termine .doc será un fichero del tipo application/msword. Ahora que todo es mime-content lo demás es cuesta abajo, solo es cuestión del comando adecuado.

Cada vez que se reciba un contenido que NO sea html, se buscara en la tabla de de conversión y se ejecutará un comando. En dicha tabla, cada fichero debe estar casado con un comando a ejecutar, la tabla le dice a mnogosearch que hacer ante cada mime-content. mnoGoGearch le manda el contenido como parámetro y el comando ha de devolver HTML pero OJO!!! el comando debe devolver el HTML por SALIDA ESTANDAR (stdout)

Osea:

entra fichero como parametro (el $1)
sale HTML como salida estandar

<= comando foo.doc
=> <p>este es el contenido del documento word</p>

Mientras respetes eso, puedes agregar cuantos mimes quieras con el comando que te de la gana. En linux hay mil y convertidores tufichero2html, busca "aptitude search 2html" y "aptitude search tohtml" para que veas.

Esta es la mía:

Mime application/msword            "text/plain; charset=utf-8" "catdoc -a -dutf-8 $1"
Mime application/man              text/html                  "gunzip -c $1|man2html"
Mime application/pdf                text/html                  "pdftohtml -stdout $1"
Mime application/oasis-document     text/html                  "odt2txt $1|markdown"

La sintáxis es:

Mime contenido/mime  forma/salida   "comando que ejecuta"

Veamos un ejemplo abstraído, convertir todos los ficheros del tipo chipojo verde, en html.

AddType chipojo/verde *.chv
Mime chipojo/verde text/html  "reptil2html --input-type chipojo --color green --stdout -i $1"

Si miras la ultima parte veras que se declara a los ficheros application/oasis-document son del tipo text/html, pero en realidad odt2txt lo que hace es devolver texto, NO html. Pues parae so está puesto ahí markdown. Para el que no lo conozca, markdown es uno de los llamados "lenguajes textiles"; es el más bien el rey de los lenguajes textiles, ya que por medio de texto crea fichero HTML, esos son los ficheros .md que ves en github como un html lindo.

Mira que fácil convertiresmo 3 lineas de texto plano en un lindo HTML que cumpla todos lo estándares, gracias a markdown y tidy.
lazaro@utopian:~$ echo -e "titulo\n-\nhola mundo\n_texto subrayado_"|markdown|tidy -q
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
<h2>titulo</h2>
<p>hola mundo <em>texto subrayado</em></p>
</body>
</html>


Si miras la salida de odt2txt verás que es medianamente compatible con esta sintaxis, ya que casi todos los ficheros fulanito2txt son compatibles con esto de los lenguajes textiles y casi todos mirando a markdown que es el caballo de atila.

Es más lindo convertir un odt en HTML que en txt, el txt se ve feo.

Ahora que todo está listo podemos indexar nuestros ficheros y cuanto sitio web nos parezca :D pero aún no lo hemos dichero al crawler donde y cuando tiene que ir a buscar la cosas. El cuando es relativo, ya que el organiza todos las ubicaciones como le da la gana mientras indexa.

De vuelta al fichero /opt/mnogosearch/etc/indexer.conf lo pondremos una
linea así:

# indexamos el contenido de la carpeta de documentos
Server file:///home/lazaro/Documentos/

# indexamos el blog
Server /var/www/nanoblog/

# indexamos /usr/share/doc/
Server file:///usr/share/doc/

# indexamos las paginas de man
Server file:///usr/share/man/man1/
Server file:///usr/share/man/man2/
Server file:///usr/share/man/man3/
Server file:///usr/share/man/man4/
Server file:///usr/share/man/man5/
Server file:///usr/share/man/man6/
Server file:///usr/share/man/man7/
Server file:///usr/share/man/man8/

# indexamos la memoria flash de la documentacion
Server file:///media/NEUDATRANS/

Finalmente corres el crawler y veras algo como esto:

lazaro@utopian:~$ /opt/mnogosearch/sbin/indexer
indexer[29669]: indexer from mnogosearch-3.3.12-sqlite3 started with '/opt/mnogosearch/etc/indexer.conf'
indexer[29669]: [29669]{01} URL: file:///usr/share/man/man8/grpck.8.gz
indexer[29669]: [29669]{01} URL: file:///usr/share/man/man8/update-openoffice-dicts.8.gz


Ah! mira:

Por defecto, buscara y parceará todos vínculos en los archivos HTML, además de que irá a buscarlos también, osea si tiene salida al mar, y el crawler chcoca con un documento que hace referncia a otro, ira a buscar ese otro, solamente ese otro (si no haría un mirror de internet completo) Por ejemplo si tiene un documento que diga "puede ver aquí tal cosa" dale por sentado que está en el indice de mnogosearch porque el fue a buscarlo ;)

Pero bueno ponte cómodo que esto va pa largo :D

En lo que palo va y viene, vamos a ir configurando el fronted-web que lo
tenemos tirado a mierda

Localizas la URL y veras el buscador

http://localhost/cgi-bin/search.cgi

Bueno pero aún no puedes buscar por que el indice no esta hecho, declaramos que fuera del tipo "blob" (mira la documentación para una explicación más linda) por tanto, tenemos que crear el índice de referencia. Mira que comando más raro, el parámetro es "-Eblob"

lazaro@utopian:~$ /opt/mnogosearch/sbin/indexer -Eblob
indexer[31030]: Converting to blob
indexer[31030]: Loading URL list

Pa largo igual :D así que ponte cómodo de nuevo

Lo mejor de esto, es que puedes indexar una flash con documentación y luego desconectar la flash (muy útil para mis 4 gigas bytes de disco duro) no depende de que el fichero indexado sea alcanzable, ya que puedes hacer click en el link que dice "cache copy" y ver el documento. 

Además, cuando vez un cache copy, los parámetros de tu búsqueda salen resaltado en amarillo ;) cada vez que hagas click en en documento, el cgi acutaliza la base de datos y tratarará de refrescar la cache si hiciste click en el enlace, también tomara las palabras claves y reoganizará la relevancia, todo eso sucederá si tiene el parametro LiveUpdates=yes, lo cual haría un poco (imperceptible) lenta la busqueda, si quieres precindir de estas características simplemetne quita ese parámetro en la conección de search.htm.

Ah! search.html puede conecectar a varias bases de datos con distintos  paráemtros, como es mi caso; tengo conectada una base de datos para la flash y otras para el disco duro local. Al crwaler le puedes mandar distintos fichero indexer.conf para indexar distintos sitios; pero el search.htm puedes usar TODAS las bases de datos a la vez. Con el LiveUpdate eso podría llegar a ser dolorosamente lento, sobre todo en bases de datos como SQLite.

Yo puedo decir descansadamente que uso más mnogosearch que google; porque al menos en debian, /usr/share/doc y man contienen todo lo necesario para echar a andar las aplicaciones...

No hay comentarios:

Publicar un comentario

Si vas a decir groserias, aclara el significado para los que no somos de tu mismo país.