CompleteSearch es un motor de búsqueda rápido e interactivo para la búsqueda de prefijos sensible al contexto en una colección determinada de documentos. No solo proporciona resultados de búsqueda, como un motor de búsqueda normal, sino también completaciones de la última palabra de consulta (tal vez solo parcialmente escrita) que conduce a un resultado. Esto se puede utilizar para proporcionar soporte muy eficiente para una variedad de funciones: autocompletado de consultas, búsqueda por facetas, búsqueda de sinónimos, búsqueda tolerante a errores y búsqueda semántica. Al final de esta página se proporciona una lista de publicaciones sobre las técnicas detrás de CompleteSearch y sus numerosas aplicaciones.
Para obtener una demostración de varios conjuntos de datos, simplemente consulte este repositorio y siga las instrucciones a continuación. Con una sola línea de comando, obtiene una demostración funcional (puede elegir entre varios conjuntos de datos, cada uno del tamaño de unos pocos millones de documentos, por lo que no es particularmente grande, pero tampoco pequeño). CompleteSearch escala a colecciones con decenas o incluso cientos de millones de documentos, sin perder su interactividad.
Consulte el repositorio y cree la imagen de la ventana acoplable.
git clone https://github.com/ad-freiburg/completesearch
cd completesearch
docker build -t completesearch .
La siguiente línea de comando crea un índice de búsqueda y luego inicia el servidor de búsqueda para el conjunto de datos especificado a través de la variable DB
(el nombre de cualquier subdirectorio de aplicaciones funciona). Bajo el PORT
especificado, tendrá una interfaz de usuario genérica, así como una API (consulte la Sección 4 a continuación).
export DB=movies && PORT=1622 && docker run -it --rm -e DB=${DB} -p ${PORT}:8080 -v $(pwd)/applications:/applications -v $(pwd)/data/:/data -v $(pwd)/ui:/ui --name completesearch.${DB} completesearch -c "make DATA_DIR=/data/${DB} DB=${DB} csv pall start"
Esta línea de comando descarga y descomprime el CSV, crea el índice e inicia el servidor, todo de una sola vez. Si ya descargó el CSV, no se descargará nuevamente (el csv:
entonces no tiene ningún efecto). Si ya ha creado el índice una vez, puede omitir el pall:
(que significa precalcular todo).
Lea esta sección si desea comprender un poco más profundamente lo que sucede con la elegante línea de comando anterior. La línea de comando primero crea una imagen de Docker a partir del código de este repositorio. Hasta ahora, todo bien. Luego ejecuta un contenedor acoplable, que monta tres volúmenes, que explicamos brevemente a continuación:
aplicaciones Esta carpeta contiene la configuración de cada aplicación. Cada configuración solo contiene dos archivos. Un Makefile
que especifica cómo crear el índice (esto es altamente personalizable, ver más abajo). Y un config.js
para personalizar la interfaz de usuario genérica.
data Esta carpeta contiene el archivo CSV con los datos originales (un registro por línea, en columnas) y los archivos de índice. Todos tienen un prefijo común. Consulte a continuación para obtener más información sobre el índice.
ui Esta carpeta contiene el código de la interfaz de usuario genérica. Si solo desea utilizar CompleteSearch como backend y crear su propia interfaz de usuario, no es necesario que monte este volumen. Sin embargo, es bueno tener siempre una interfaz de usuario funcional disponible para realizar pruebas, sin ningún trabajo adicional.
Como todos los motores de búsqueda, CompleteSearch crea un índice con la ayuda del cual puede responder consultas de manera eficiente. No es un índice invertido ordinario, sino algo más sofisticado: un índice medio invertido o índice híbrido (HYB) . No es necesario que comprenda esto si solo desea utilizar CompleteSearch. Pero si estás interesado, puedes conocer más al respecto en las publicaciones a continuación.
Para crear el índice, CompleteSearch requiere dos archivos de entrada, uno con el sufijo .words
y otro con el sufijo .docs
. El primero contiene el contenido de sus documentos dividido en palabras. El segundo contiene los datos que desea mostrar como visitas al motor de búsqueda. Los dos suelen estar relacionados, pero no exactamente iguales. El formato es muy simple y se describe con un ejemplo aquí.
Si tiene deseos especiales, puede crear estos dos archivos de entrada usted mismo, a partir de cualesquiera que sean sus datos. Entonces tendrá control total sobre lo que CompleteSearch hará y puede hacer por usted. Sin embargo, en la mayoría de las aplicaciones, puede utilizar nuestro analizador CSV genérico . Toma un archivo CSV (un registro por línea, con un número fijo de columnas por línea) como entrada, y a partir de ahí produce los archivos .words y .docs .
El análisis CSV es muy potente y altamente personalizable. Puedes ver cómo se utiliza en el Makefile de las distintas aplicaciones de ejemplo (en los subdirectorios del directorio applications
). Un subconjunto de las opciones se describe con más detalle aquí. Para obtener una lista completa, consulte el código que analiza las opciones.
El binario para iniciar el motor CompleteSearch se llama startCompletionServer
. Es muy potente y tiene muchas opciones. Para algunos usos de ejemplo, puede echar un vistazo al Makefile
en las applications
del director y al Makefile
incluido de una de las aplicaciones de ejemplo. Puede encontrar documentación detallada de todas las opciones en README.md en el directorio src.
Una vez iniciado, puede realizar consultas utilizando nuestra interfaz de usuario genérica y personalizable (ver arriba). O puede preguntarle al backend directamente, a través de la API HTTP proporcionada por startCompletionServer
. La API es muy simple y se describe al final de esta página. Pruebe con una de las aplicaciones de ejemplo para tener una idea de lo que hace. También puede consultar el código JavaScript (bastante simple) de la interfaz de usuario genérica para tener una idea de cómo funciona y para qué se puede utilizar.
Para mostrar su instancia de CompleteSearch a sus amigos, es posible que desee que se ejecute en una URL elegante y no en http://my.weird.hostname.somewhere:76154
. Supongamos que tiene un servidor web Apache ejecutándose en su máquina. Luego puede agregar la siguiente sección en su apache.conf
o en un archivo de configuración separado incluido en apache.conf
. Debe reemplazar servername
por el nombre de dominio completo (FQDN) de la máquina en la que se ejecuta su servidor web Apache. Debe reemplazar hostname
por el FQDN de la máquina en la que se ejecuta la interfaz de CompleteSearch. Puede ser la misma máquina que servername
, pero no es necesario que lo sea.
< VirtualHost *:80>
ServerName example.cs.uni-freiburg.de
ServerAlias dblp example.cs.uni-freiburg.de
ServerAdmin webmaster@localhost
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://< hostname >:5000/
ProxyPassReverse / http://< hostname >:5000>/
...
</ VirtualHost >
Estas son algunas de las publicaciones que explican las técnicas detrás de CompleteSearch y para qué se puede utilizar. Este trabajo se realizó en el Instituto Max-Planck de Informática. Ya fue hace un tiempo, pero resulta que las características y la eficiencia proporcionadas por CompleteSearch todavía son de última generación.
Escriba menos, encuentre más: autocompletado rápido con un índice sucinto @ SIGIR 2006
El motor de búsqueda completo: interactivo, eficiente y hacia la integración de IR&DB @ CIDR 2007
ESTER: búsqueda eficiente de texto, entidades y relaciones @ SIGIR 2007
Ampliación eficiente de consultas interactivas con búsqueda completa @ CIKM 2007
Búsqueda de autocompletado sensible a la salida @ Recuperación de información 2008
Búsqueda semántica de texto completo con ESTER: escalable, fácil y rápida en ICDM 2008