CompleteSearch는 특정 문서 컬렉션에 대한 상황에 맞는 접두어 검색을 위한 빠르고 대화형 검색 엔진입니다. 일반 검색 엔진처럼 검색 결과를 제공할 뿐만 아니라 히트로 이어지는 마지막(부분적으로만 입력된) 검색어에 대한 완성도 제공합니다. 이는 쿼리 자동 완성, 패싯 검색, 동의어 검색, 오류 허용 검색, 의미 검색 등 다양한 기능을 매우 효율적으로 지원하는 데 사용할 수 있습니다. CompleteSearch의 기술과 다양한 응용 프로그램에 대한 출판물 목록이 이 페이지 끝에 제공됩니다.
다양한 데이터 세트에 대한 데모를 보려면 이 저장소를 확인하고 아래 지침을 따르십시오. 단일 명령줄을 사용하면 작업 데모를 얻을 수 있습니다(각각 수백만 개의 문서 크기로 특별히 크지도 작지도 않은 여러 데이터 세트 중에서 선택할 수 있음). CompleteSearch는 상호 작용성을 유지하면서 수천만, 심지어 수억 개의 문서 컬렉션으로 확장됩니다.
저장소를 체크아웃하고 Docker 이미지를 빌드하세요.
git clone https://github.com/ad-freiburg/completesearch
cd completesearch
docker build -t completesearch .
다음 명령줄은 검색 인덱스를 구축한 다음 DB
변수(응용 프로그램의 모든 하위 디렉터리 이름이 작동함)를 통해 지정된 데이터 세트에 대한 검색 서버를 시작합니다. 지정된 PORT
아래에는 일반 UI와 API가 있습니다(아래 섹션 4 참조).
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"
이 명령줄은 CSV를 다운로드 및 압축 해제하고, 인덱스를 작성하고, 서버를 시작하는 과정을 모두 한 번에 수행합니다. 이미 CSV를 다운로드한 경우에는 다시 다운로드되지 않습니다(Makefile 대상 csv:
그러면 아무 효과도 없음). 이미 인덱스를 한 번 구축한 경우 Makefile 대상 pall:
모두 사전 계산을 나타냄)을 생략할 수 있습니다.
위의 멋진 명령줄에서 어떤 일이 벌어지고 있는지 좀 더 깊이 이해하고 싶다면 이 섹션을 읽어보세요. 명령줄은 먼저 이 저장소의 코드에서 Docker 이미지를 빌드합니다. 지금까지는 너무 좋았습니다. 그런 다음 3개의 볼륨을 탑재하는 Docker 컨테이너를 실행합니다. 이에 대해서는 다음에 간략하게 설명하겠습니다.
애플리케이션 이 폴더에는 각 애플리케이션에 대한 구성이 포함되어 있습니다. 각 구성에는 두 개의 파일만 포함됩니다. 인덱스 구축 방법을 지정하는 Makefile
(이는 고도로 사용자 정의 가능합니다. 아래 참조) 그리고 일반 UI를 사용자 정의하기 위한 config.js
.
data 이 폴더에는 원본 데이터(열당 한 줄에 하나의 레코드)가 포함된 CSV 파일과 인덱스 파일이 포함되어 있습니다. 그들은 모두 공통 접두사를 가지고 있습니다. 인덱스에 대한 자세한 내용은 아래를 참조하세요.
ui 이 폴더에는 일반 UI용 코드가 포함되어 있습니다. CompleteSearch를 백엔드로 사용하고 자신만의 UI를 구축하려는 경우에는 이 볼륨을 마운트할 필요가 없습니다. 그러나 추가 작업 없이 항상 작동하는 UI를 테스트에 사용할 수 있다는 것은 좋은 일입니다.
모든 검색 엔진과 마찬가지로 CompleteSearch는 쿼리에 효율적으로 응답할 수 있는 색인을 구축합니다. 이는 일반적인 역지수가 아니라 좀 더 멋진 것, 즉 반역지수 또는 하이버드(HYB) 지수입니다. CompleteSearch를 사용하려는 경우에는 이 내용을 이해할 필요가 없습니다. 하지만 관심이 있으시면 아래 출판물에서 이에 대해 자세히 알아볼 수 있습니다.
색인을 작성하려면 CompleteSearch에 두 개의 입력 파일이 필요합니다. 하나는 접미사 .words
이고 다른 하나는 접미사 .docs
입니다. 첫 번째에는 단어로 분할된 문서 내용이 포함되어 있습니다. 두 번째에는 검색 엔진 조회로 표시하려는 데이터가 포함되어 있습니다. 이 둘은 일반적으로 관련되어 있지만 정확히 동일하지는 않습니다. 형식은 매우 간단하며 여기에 예를 들어 설명되어 있습니다.
특별한 희망 사항이 있는 경우 데이터가 무엇이든 이 두 입력 파일을 직접 작성할 수 있습니다. 그러면 CompleteSearch가 귀하를 위해 수행할 작업과 수행할 수 있는 작업을 완전히 제어할 수 있습니다. 그러나 대부분의 애플리케이션에서는 일반 CSV 파서를 사용할 수 있습니다. CSV 파일(한 줄에 하나의 레코드, 줄당 고정된 수의 열 포함)을 입력으로 사용하고 이 파일에서 .words 및 .docs 파일을 생성합니다.
CSV 구문 분석은 매우 강력하고 사용자 정의가 가능합니다. 다양한 예제 애플리케이션의 Makefile ( applications
디렉토리의 하위 디렉토리)에서 이것이 어떻게 사용되는지 확인할 수 있습니다. 여기에서는 옵션의 하위 집합에 대해 자세히 설명합니다. 전체 목록을 보려면 옵션을 구문 분석하는 코드를 살펴보세요.
CompleteSearch 엔진을 시작하는 바이너리를 startCompletionServer
라고 합니다. 매우 강력하고 다양한 옵션이 있습니다. 몇 가지 사용 예를 보려면 Director applications
의 Makefile
과 예제 응용 프로그램 중 하나에 포함된 Makefile
살펴보세요. 모든 옵션에 대한 자세한 문서는 src 디렉터리의 README.md에서 찾을 수 있습니다.
일단 시작하면 일반 및 사용자 정의 가능한 UI(위 참조)를 사용하여 쿼리할 수 있습니다. 또는 startCompletionServer
에서 제공하는 HTTP API를 통해 백엔드에 직접 요청할 수 있습니다. API는 매우 간단하며 이 페이지 끝에 설명되어 있습니다. 예제 응용 프로그램 중 하나를 사용하여 그것이 수행하는 작업에 대한 느낌을 얻으십시오. 또한 일반 UI의 (다소 간단한) JavaScript 코드를 보고 작동 방식과 용도에 대한 느낌을 얻을 수도 있습니다.
CompleteSearch 인스턴스를 친구에게 보여주기 위해 http://my.weird.hostname.somewhere:76154
가 아닌 멋진 URL에서 실행되도록 할 수 있습니다. 귀하의 컴퓨터에서 Apache 웹 서버가 실행되고 있다고 가정해 보겠습니다. 그런 다음 apache.conf
또는 apache.conf
에 포함된 별도의 구성 파일에 다음 섹션을 추가할 수 있습니다. servername
Apache 웹 서버가 실행 중인 시스템의 FQDN(정규화된 도메인 이름)으로 바꿔야 합니다. hostname
CompleteSearch 프런트엔드가 실행 중인 시스템의 FQDN으로 바꿔야 합니다. 이는 servername
과 동일한 시스템일 수 있지만 반드시 그럴 필요는 없습니다.
< 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 >
CompleteSearch의 기본 기술과 그 용도를 설명하는 간행물은 다음과 같습니다. 이 작업은 막스-플랑크-정보학 연구소(Max-Planck-Institute for Informatics)에서 수행되었습니다. 이미 오래전 일이지만 CompleteSearch가 제공하는 기능과 효율성은 여전히 최첨단 수준인 것으로 나타났습니다.
더 적게 입력하고 더 많이 찾기: 간결한 색인을 사용한 빠른 자동 완성 @ SIGIR 2006
CompleteSearch 엔진: 대화형이고 효율적이며 IR&DB 통합을 지향 @ CIDR 2007
ESTER: 텍스트, 엔터티 및 관계에 대한 효율적인 검색 @ SIGIR 2007
완전한 검색 @ CIKM 2007을 통한 효율적인 대화형 쿼리 확장
출력에 민감한 자동 완성 검색 @ 정보 검색 2008
ESTER를 사용한 의미론적 전체 텍스트 검색: 확장 가능하고 쉽고 빠릅니다 @ ICDM 2008