CompleteSearch est un moteur de recherche rapide et interactif pour la recherche de préfixes contextuelle sur une collection donnée de documents. Il ne fournit pas seulement des résultats de recherche, comme un moteur de recherche classique, mais également des réponses complètes pour le dernier mot de requête (peut-être seulement partiellement tapé) qui a conduit à un résultat. Cela peut être utilisé pour fournir une prise en charge très efficace d'une variété de fonctionnalités : saisie semi-automatique de requêtes, recherche à facettes, recherche de synonymes, recherche tolérante aux erreurs, recherche sémantique. Une liste de publications sur les techniques derrière CompleteSearch et ses nombreuses applications est fournie à la fin de cette page.
Pour une démonstration sur divers ensembles de données, consultez simplement ce référentiel et suivez les instructions ci-dessous. Avec une seule ligne de commande, vous obtenez une démo fonctionnelle (vous pouvez choisir parmi plusieurs ensembles de données, chacun de la taille de quelques millions de documents, donc pas particulièrement volumineux, mais pas non plus petits). CompleteSearch s'adapte à des collections contenant des dizaines, voire des centaines de millions de documents, sans perdre son interactivité.
Extrayez le référentiel et créez l'image Docker
git clone https://github.com/ad-freiburg/completesearch
cd completesearch
docker build -t completesearch .
La ligne de commande suivante crée un index de recherche, puis démarre le serveur de recherche pour l'ensemble de données spécifié via la variable DB
(le nom de n'importe quel sous-répertoire d'applications fonctionne). Sous le PORT
spécifié, vous disposez alors d'une interface utilisateur générique, ainsi que d'une API (voir la section 4 ci-dessous).
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"
Cette ligne de commande télécharge et décompresse le CSV, crée l'index et démarre le serveur, le tout en une seule fois. Si vous avez déjà téléchargé le CSV, il ne sera pas téléchargé à nouveau (le csv:
n'a alors aucun effet). Si vous avez déjà construit l'index une fois, vous pouvez omettre le pall:
(qui signifie tout précalculer).
Lisez cette section si vous souhaitez comprendre un peu plus en profondeur ce qui se passe avec la ligne de commande sophistiquée ci-dessus. La ligne de commande crée d'abord une image Docker à partir du code de ce référentiel. Jusqu'ici, tout va bien. Il exécute ensuite un conteneur Docker, qui monte trois volumes, que nous expliquons brièvement ensuite :
applications Ce dossier contient la configuration de chaque application. Chaque configuration ne contient que deux fichiers. Un Makefile
qui spécifie comment construire l'index (ceci est hautement personnalisable, voir ci-dessous). Et un config.js
pour personnaliser l'interface utilisateur générique.
data Ce dossier contient le fichier CSV avec les données originales (un enregistrement par ligne, en colonnes) et les fichiers d'index. Ils ont tous un préfixe commun. Voir ci-dessous pour plus d’informations sur l’index.
ui Ce dossier contient le code de l'interface utilisateur générique. Si vous souhaitez simplement utiliser CompleteSearch comme backend et créer votre propre interface utilisateur, vous n'avez pas besoin de monter ce volume. Il est cependant agréable de toujours disposer d'une interface utilisateur fonctionnelle disponible pour les tests, sans aucun travail supplémentaire.
Comme tous les moteurs de recherche, CompleteSearch construit un index à l’aide duquel il peut ensuite répondre efficacement aux requêtes. Il ne s'agit pas d'un index inversé ordinaire, mais de quelque chose de plus sophistiqué : un index semi-inversé ou un index hybride (HYB) . Vous n'êtes pas obligé de comprendre cela si vous souhaitez simplement utiliser CompleteSearch. Mais si cela vous intéresse, vous pourrez en apprendre davantage dans les publications ci-dessous.
Pour créer l'index, CompleteSearch nécessite deux fichiers d'entrée, un avec le suffixe .words
et l'autre avec le suffixe .docs
. Le premier contient le contenu de vos documents découpé en mots. La seconde contient les données que vous souhaitez afficher lors des résultats des moteurs de recherche. Les deux sont généralement liés, mais pas exactement identiques. Le format est très simple et est décrit par exemple ici.
Si vous avez des souhaits particuliers, vous pouvez créer vous-même ces deux fichiers d'entrée, à partir de quelles que soient vos données. Vous avez alors un contrôle total sur ce que CompleteSearch fera et pourra faire pour vous. Cependant, dans la plupart des applications, vous pouvez utiliser notre analyseur CSV générique . Il prend un fichier CSV (un enregistrement par ligne, avec un nombre fixe de colonnes par ligne) en entrée, et à partir de là, il produit le fichier .words et .docs .
L'analyse CSV est très puissante et hautement personnalisable. Vous pouvez voir comment il est utilisé dans le Makefile des différents exemples d'applications (dans les sous-répertoires du répertoire applications
). Un sous-ensemble des options est décrit plus en détail ici. Pour une liste complète, consultez le code qui analyse les options.
Le binaire permettant de démarrer le moteur CompleteSearch s'appelle startCompletionServer
. Il est très puissant et propose de nombreuses options. Pour quelques exemples d'utilisation, vous pouvez consulter le Makefile
dans les applications
du directeur et le Makefile
inclus de l'un des exemples d'applications. Une documentation détaillée de toutes les options peut être trouvée dans le fichier README.md du répertoire src.
Une fois démarré, vous pouvez soit poser des requêtes en utilisant notre interface utilisateur générique et personnalisable (voir ci-dessus). Ou vous pouvez demander directement au backend, via l'API HTTP fournie par startCompletionServer
. L'API est très simple et décrite à la fin de cette page. Jouez avec l'un des exemples d'applications pour avoir une idée de ce qu'il fait. Vous pouvez également consulter le code JavaScript (plutôt simple) de l'interface utilisateur générique pour avoir une idée de son fonctionnement et de son utilisation.
Pour montrer votre instance CompleteSearch à vos amis, vous souhaiterez peut-être qu'elle s'exécute sous une URL sophistiquée, et non http://my.weird.hostname.somewhere:76154
. Supposons que vous disposiez d'un serveur Web Apache en cours d'exécution sur votre machine. Ensuite, vous pouvez ajouter la section suivante dans votre apache.conf
ou dans un fichier de configuration séparé inclus par apache.conf
. Vous devez remplacer servername
par le nom de domaine complet (FQDN) de la machine sur laquelle s'exécute votre serveur Web Apache. Vous devez remplacer hostname
par le FQDN de la machine sur laquelle l'interface CompleteSearch s'exécute. Il peut s'agir de la même machine que servername
, mais ce n'est pas obligatoire.
< 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 >
Voici quelques-unes des publications expliquant les techniques derrière CompleteSearch et à quoi il peut être utilisé. Ce travail a été réalisé à l'Institut Max-Planck d'informatique. Cela fait déjà longtemps, mais il s'avère que les fonctionnalités et l'efficacité fournies par CompleteSearch sont encore à la pointe de la technologie.
Tapez moins, trouvez plus : saisie semi-automatique rapide avec un index succinct @ SIGIR 2006
Le moteur de recherche complet : interactif, efficace et vers l'intégration IR&DB au CIDR 2007
ESTER : recherche efficace sur le texte, les entités et les relations @ SIGIR 2007
Expansion efficace des requêtes interactives avec recherche complète au CIKM 2007
Recherche d'auto-complétion sensible à la sortie @ Information Retrieval 2008
Recherche sémantique en texte intégral avec ESTER : évolutive, simple et rapide @ ICDM 2008