CompleteSearch é um mecanismo de pesquisa rápido e interativo para pesquisa de prefixo sensível ao contexto em uma determinada coleção de documentos. Ele não fornece apenas resultados de pesquisa, como um mecanismo de pesquisa normal, mas também conclusões para a última palavra de consulta (talvez apenas parcialmente digitada) que levou a um resultado. Isso pode ser usado para fornecer suporte muito eficiente para uma variedade de recursos: preenchimento automático de consultas, pesquisa facetada, pesquisa de sinônimos, pesquisa tolerante a erros, pesquisa semântica. Uma lista de publicações sobre as técnicas por trás do CompleteSearch e suas diversas aplicações é fornecida no final desta página.
Para uma demonstração de vários conjuntos de dados, basta verificar este repositório e seguir as instruções abaixo. Com uma única linha de comando, você obtém uma demonstração funcional (você pode escolher entre vários conjuntos de dados, cada um com o tamanho de alguns milhões de documentos, portanto não particularmente grandes, mas também não pequenos). O CompleteSearch pode ser dimensionado para coleções com dezenas ou até centenas de milhões de documentos, sem perder sua interatividade.
Faça check-out do repositório e construa a imagem do docker
git clone https://github.com/ad-freiburg/completesearch
cd completesearch
docker build -t completesearch .
A linha de comando a seguir cria um índice de pesquisa e, em seguida, inicia o servidor de pesquisa para o conjunto de dados especificado por meio da variável DB
(o nome de qualquer subdiretório de aplicativos funciona). Na PORT
especificada você terá uma UI genérica, bem como uma API (veja a Seção 4 abaixo).
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 linha de comando baixa e descompacta o CSV, cria o índice e inicia o servidor, tudo de uma vez. Se você já baixou o CSV, ele não será baixado novamente (o Makefile target csv:
então não tem efeito). Se você já construiu o índice uma vez, você pode omitir o alvo Makefile pall:
(que significa pré-computação de tudo).
Leia esta seção se quiser entender um pouco mais profundamente o que está acontecendo com a sofisticada linha de comando acima. A linha de comando primeiro cria uma imagem docker a partir do código neste repositório. Até agora tudo bem. Em seguida, ele executa um contêiner docker, que monta três volumes, que explicaremos brevemente a seguir:
aplicativos Esta pasta contém a configuração de cada aplicativo. Cada configuração contém apenas dois arquivos. Um Makefile
que especifica como construir o índice (isso é altamente personalizável, veja abaixo). E um config.js
para personalizar a UI genérica.
data Esta pasta contém o arquivo CSV com os dados originais (um registro por linha, em colunas) e os arquivos de índice. Todos eles têm um prefixo comum. Veja abaixo mais informações sobre o índice.
ui Esta pasta contém o código da UI genérica. Se você deseja apenas usar o CompleteSearch como back-end e construir sua própria UI, não é necessário montar este volume. É bom, entretanto, ter sempre uma UI funcional disponível para teste, sem nenhum trabalho extra.
Como todos os motores de busca, o CompleteSearch constrói um índice com a ajuda do qual pode responder às consultas de forma eficiente. Não é um índice invertido comum, mas algo mais sofisticado: um índice meio invertido ou índice hybird (HYB) . Você não precisa entender isso se quiser apenas usar o CompleteSearch. Mas se você tiver interesse, pode saber mais sobre o assunto nas publicações abaixo.
Para construir o índice, o CompleteSearch requer dois arquivos de entrada, um com sufixo .words
e outro com sufixo .docs
. O primeiro contém o conteúdo dos seus documentos dividido em palavras. O segundo contém os dados que você deseja exibir como resultados do mecanismo de pesquisa. Os dois geralmente estão relacionados, mas não exatamente iguais. O formato é muito simples e é descrito por exemplo aqui.
Se você tiver desejos especiais, você mesmo pode construir esses dois arquivos de entrada, a partir de quaisquer que sejam seus dados. Então você tem controle total sobre o que o CompleteSearch fará e pode fazer por você. No entanto, na maioria dos aplicativos, você pode usar nosso analisador CSV genérico . Ele pega um arquivo CSV (um registro por linha, com um número fixo de colunas por linha) como entrada e a partir dele produz os arquivos .words e .docs .
A análise CSV é muito poderosa e altamente personalizável. Você pode ver como ele é usado no Makefile dos vários aplicativos de exemplo (nos subdiretórios do diretório applications
). Um subconjunto de opções é descrito com mais detalhes aqui. Para obter uma lista completa, consulte o código que analisa as opções.
O binário para iniciar o mecanismo CompleteSearch é chamado startCompletionServer
. É muito poderoso e tem muitas opções. Para alguns exemplos de uso, você pode dar uma olhada no Makefile
nos applications
diretores e no Makefile
incluído de um dos aplicativos de exemplo. Uma documentação detalhada de todas as opções pode ser encontrada em README.md no diretório src.
Depois de iniciado, você pode fazer perguntas usando nossa interface de usuário genérica e personalizável (veja acima). Ou você pode perguntar diretamente ao back-end, por meio da API HTTP fornecida por startCompletionServer
. A API é muito simples e descrita no final desta página. Experimente um dos aplicativos de exemplo para ter uma ideia do que ele faz. Você também pode observar o código JavaScript (bastante simples) da IU genérica para ter uma ideia de como ele funciona e para que pode ser usado.
Para exibir sua instância do CompleteSearch para seus amigos, você pode querer que ela seja executada em uma URL sofisticada, e não em http://my.weird.hostname.somewhere:76154
. Suponhamos que você tenha um servidor web Apache rodando em sua máquina. Então você pode adicionar a seguinte seção em seu apache.conf
ou em um arquivo de configuração separado incluído por apache.conf
. Você deve substituir servername
pelo nome de domínio totalmente qualificado (FQDN) da máquina na qual seu servidor Apache está sendo executado. Você deve substituir hostname
pelo FQDN da máquina na qual o frontend CompleteSearch está sendo executado. Esta pode ser a mesma máquina que servername
, mas não precisa ser.
< 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 >
Aqui estão algumas das publicações que explicam as técnicas por trás do CompleteSearch e para que ele pode ser usado. Este trabalho foi realizado no Instituto Max-Planck de Informática. Já faz um tempo, mas acontece que os recursos e a eficiência fornecidos pelo CompleteSearch ainda são de última geração.
Digite menos, encontre mais: preenchimento automático rápido com um índice sucinto @ SIGIR 2006
O mecanismo de pesquisa completo: interativo, eficiente e rumo à integração de IR e banco de dados no CIDR 2007
ESTER: busca eficiente em texto, entidades e relações @ SIGIR 2007
Expansão eficiente de consultas interativas com pesquisa completa no CIKM 2007
Pesquisa de preenchimento automático sensível à saída na recuperação de informações 2008
Pesquisa semântica de texto completo com ESTER: escalonável, fácil, rápida @ ICDM 2008