테스트 데이터는 ClueWeb09B 데이터세트에서 가져온 것이며, 그 샘플은 테스트 목적으로 ./test_data
디렉토리에 저장되어 있습니다. 인덱스 작성을 시작하면 프로그램은 압축된 정방향 인덱스를 읽고 압축을 해제한 후 위치 게시를 생성합니다. 위치 게시는 비위치 게시를 생성하는 것으로 계산됩니다.
위치 포스팅과 비위치 포스팅은 두 개의 STL 벡터에 별도로 저장됩니다. 벡터가 특정 크기(예: 500)에 도달하면 두 벡터가 모두 압축되어 비워집니다. 압축된 바이너리 배열을 저장하기 위해 디스크의 disk_index
디렉터리 아래에 두 개의 파일이 생성됩니다. 이 과정은 게시물이 500개 미만으로 남을 때까지 반복됩니다. 남은 포스팅은 동적 인덱스로 메모리에 저장됩니다.
현재로서는 한 가지 형태의 인코딩 방법만 구현됩니다. method가 1이면 게시물은 가변 바이트 인코딩을 사용하여 압축됩니다. 내 인덱스에 사용되는 가변 바이트 규칙은 다음과 같습니다.
각 파일의 이름은 접두사와 숫자라는 두 부분으로 구성됩니다. 위치 인덱스는 "Z0", "Z1", ... "Zn", "I0", "I1", ... "In" 파일에 저장됩니다. 압축 후 인덱서는 디스크에 "Z0"이 존재하는지 확인합니다. "Z0"이 종료되지 않으면 "Z0"이 생성되고 "Z0"에 인덱스를 씁니다. "Z0"이 있으면 대신 "I0"에 인덱스가 기록됩니다. 비 위치 인덱스의 경우 "X0"을 확인하고 존재하지 않는 경우 기록됩니다. 그렇지 않으면 비위치 인덱스가 "L0"에 기록됩니다. 용어 ID는 해당 파일의 파일 메타데이터에 저장됩니다. 용어의 메타데이터에는 파일 이름과 시작 및 끝 위치가 저장됩니다.
동일한 인덱스 번호를 가진 두 파일은 디스크에 영구적으로 공존할 수 없습니다. 500개의 게시물이 디스크에 기록될 때마다 인덱서는 동일한 인덱스 번호를 가진 파일이 두 개 있는지 확인합니다. 있는 경우 두 개의 파일이 인덱스 번호가 1씩 증가하여 새 파일로 결합됩니다. 이 프로세스를 로그 병합이라고 합니다. 예를 들어 "Z0"과 "I0"이 모두 존재하면 결합되어 "Z1"에 기록되고, "Z1"이 디스크에 이미 존재하는 경우 "I1"에 기록됩니다. 이 프로세스는 디스크에 "I" 파일이 없을 때까지 반복됩니다. 이에 따라 메타데이터가 업데이트됩니다.
새로운 게시물이 수신되어 동적 인덱스에 저장됩니다. 문서 분석기에 의해 생성된 전기를 외부 전기라 하고, 메모리에 저장되는 전기를 내부 전기라 합니다. 메모리에 500개의 포스팅이 있을 때 인덱스 구축과 같은 방법으로 압축한다.
indexer.cpp
의 두 가지 오류와 두 가지 기능을 동일한 파일에서 최적화할 수 있습니다. ./initialize.sh
디스크 인덱스가 저장되는 디렉터리를 생성하고 디렉터리가 비어 있는지 확인합니다. make
를 호출합니다 ./INDEX
인덱스 구축을 시작합니다.