Crear un índice de búsqueda y consultarlo desde la línea de comando

¿Existe una herramienta con las siguientes características?

Interfaz de línea de comandos (para indexación y búsqueda)

Tenemos greppara la búsqueda de línea de comandos de archivos txt. Es rápido siempre que el archivo tenga como máximo unos pocos megabytes.

Mantiene un índice (para búsquedas con resultados inmediatos)

Tenemos mlocate, que usa un índice. A diferencia de grep, mantiene una base de datos (es decir, un índice), en lugar de buscar el contenido directamente, lo que mejora el rendimiento.

Sin embargo, está destinado solo a rutas de archivos, que también son rutas que realmente son válidas en su sistema de archivos en lugar de solo corpus (¿corpi?) De texto de forma libre.

Contenido sin restricciones (para indexación)

Para la búsqueda de volúmenes gigantes sin restricciones sobre qué elementos (es decir, documentos) almacenamos, tenemos Apache Solr. Pero esos están destinados principalmente a clientes web, no a la línea de comandos (aunque sé que puede curlacceder a su servidor y analizar la respuesta XML, ¡puaj!).

Entonces mi pregunta es: ¿existe (el concepto de) una herramienta que hace lo siguiente?

  1. la interfaz de búsqueda es la línea de comando (como grep)
  2. almacena un índice de elementos de texto sin formato (como mlocate)
  3. No tiene restricciones sobre lo que representa semánticamente ese texto sin formato (como Apache Solr)

Sé que podría escribir el mío propio, pero a) no voy a vivir tanto tiempo b) seguramente alguien en el dominio del software habrá tenido este requisito en su vida antes.

El plural de corpus es corpus . Corpi suena mejor, sin embargo.

Respuestas (2)

No estoy seguro de qué significan los volúmenes gigantes para usted, pero http://sary.sourceforge.net/ podría ser un lugar para comenzar.

En uno de nuestros sistemas, ejecutamos vislumbrar el índice todas las noches. Produce un índice y tiene algunas opciones para establecer el tamaño del índice. El comando de búsqueda complementario, vislumbrar, tiene numerosas opciones para controlar la búsqueda y la salida.

Parece prometedor, lo seguiré aquí después de que tenga algo de tiempo para experimentar con él.
Nota: última actualización 2005-03-30. Además, las instrucciones de instalación no son claras.

Recoll parece hacer lo que estoy buscando: http://www.lesbonscomptes.com/recoll/

Instalación

sudo apt-get install recoll

Construir un índice

cat videos.txt | recollindex -if

Página de manual:

   recollindex -i will index individual files into the database. The stem expansion and aspell databases will not be updated. The skippedPaths and skippedNames configuration variables will be used, so that some files  may  be
   skipped.  You  can  tell recollindex to ignore skippedPaths and skippedNames by setting the -f option. This allows fully custom file selection for a given subtree, for which you would add the top directory to skippedPaths,
   and use any custom tool to generate the file list (ie: a tool from a source code control system).

Buscar un índice

recoll -t world cup

Producción

video/webm  [file:///Large/Videos/documentary/Documentaries2/documentaries/The 1966 World Cup Documentary.webm] [The 1966 World Cup Documentary.webm]   43323557    bytes
video/x-ms-asf  [file:///Large/Videos/soccer/1986 World Cup Mexico /film/World Cup Mexico 1986 Highlights.wmv]  [World Cup Mexico 1986 Highlights.wmv]  75115064    bytes
video/mp4   [file:///Large/Videos/soccer/1990 World Cup Italia/Italia 90 World Cup 1990.mp4]    [Italia 90 World Cup 1990.mp4]  44752690    bytes
video/webm  [file:///Large/Videos/soccer/1994 World Cup USA/1994 FIFA World Cup Highlights.webm]    [1994 FIFA World Cup Highlights.webm]   99297071    bytes
video/webm  [file:///Large/Videos/soccer/1994 World Cup USA/WHITNEY HOUSTON IN WORLD CUP 1994.webm] [WHITNEY HOUSTON IN WORLD CUP 1994.webm]    209027435   bytes

ubicación de datos

0       ~/.recoll/xapiandb/flintlock
4.0K    ~/.recoll/xapiandb/iamchert
4.0K    ~/.recoll/xapiandb/position.baseA
4.0K    ~/.recoll/xapiandb/position.baseB
4.0K    ~/.recoll/xapiandb/postlist.baseA
4.0K    ~/.recoll/xapiandb/postlist.baseB
4.0K    ~/.recoll/xapiandb/record.baseA
4.0K    ~/.recoll/xapiandb/record.baseB
4.0K    ~/.recoll/xapiandb/termlist.baseA
4.0K    ~/.recoll/xapiandb/termlist.baseB
2.5M    ~/.recoll/xapiandb/record.DB
7.6M    ~/.recoll/xapiandb/termlist.DB
13M     ~/.recoll/xapiandb/postlist.DB
14M     ~/.recoll/xapiandb/position.DB
36M     ~/.recoll/xapiandb

notas

  • INCORRECTO: si el registro de entrada no existe en el sistema de archivos, el registro aún se agregará al índice, pero su contenido no se indexará.
    • En realidad, no indexará archivos que no existen. Así que no hay mucho beneficio en usar recollmásmlocate
  • Créditos https://unix.stackexchange.com/a/76198/7000