게시판 및 접미어 배열과 같이 큰 코퍼스를 대상으로 전체 텍스트 검색을 수행하는 데는 기본적으로 두 가지 기술이 사용됩니다.
게시 목록은 (용어, document_id) 쌍의 목록이며 선택적으로 문서의 위치를 포함합니다. 용어를 정렬하거나 용어별로 해시하는 경우 효율적으로 검색 할 수있는 전체 텍스트 인덱스가 있습니다.
게시 목록을 작고, 액세스가 빠르고, 업데이트가 빠르고, 유연성이 뛰어나고, 정확도를 저하시키는 다양한 기술이 있습니다. Lucene은 아마도 현재 상용 가능한 게시 목록 기반의 텍스트 인덱서 일 수 있으며, 이전의 주석과는 달리 PDF, Microsoft Word 등에서 발견 된 텍스트를 색인 할 수 있습니다. 토마스 마이어 호퍼 (Thomas Maierhofer)가 연결 한 Lucene.net project은 꽤 합리적인 포트처럼 보입니다. 물론 자바 버전에서 진행되고있는 일의 최첨단에 조금 뒤떨어져 있습니다.
메모리보다 훨씬 큰 코퍼는 디스크에 게시 목록을 저장해야합니다. 간단한 바이너리 검색 트리를 사용하여 접근하는 것을 막습니다. 각각 10 만 단어의 문서가있는 경우 10 억 개의 게시물이 있습니다. 즉, 이진 검색 트리의 최소 깊이는 30입니다. 문제는 트리의 루트에서 리프까지의 경로에있는 30 개의 노드는 일반적으로 디스크의 다른 부분에 위치하므로 디스크는 한 번에 게시물을 찾기 위해 30 번 검색해야합니다! 그것은 약 2½ 초이며, 이것은 매우 느립니다.
그러나 "B-tree"라는 이진 트리 데이터 구조의 수정 된 버전이 있습니다. 은 일 수 있습니다. Lucene은 B-tree와 비슷한 간단한 데이터 구조를 사용하지만 대규모 업데이트를 훨씬 쉽게 지원합니다. 필자는 dumbfts project이라는 동일한 데이터 구조의 아주 간단한 버전을 작성했습니다.이 파일 구조는 Python의 몇 페이지에서 전자 메일에 대한 전체 텍스트 검색 엔진을 구현합니다. 나는 매일 그것을 사용하고, 자유 소프트웨어이고, 내가 사용하는 것에 꽤 잘 작동하지만 Lucene과 같은 세계적 수준의 검색 시스템은 아니다.
정확성을 희생하여 게시 목록을 작게 만드는 예로, Gigabytes 관리 책 (및 mg4j project)에는 "signed minimal perfect hash table"이라고하는 데이터 구조가 있습니다.이 구조는 실제로 색인 된 - 그냥 해시합니다. 따라서 거짓 긍정의 가능성은 매우 적습니다. 용어를 포함하고 있다고 가정하는 문서를 검색해야합니다.
훨씬 작고 약간 느린 기수 트리 (일명 시도)의 접미사 배열은 GLIMPSE 및 기타 몇 가지 프로그램에 의해 구현되지만 근본적으로 요즘 사용되지는 않습니다. 게시 목록 데이터 구조에는 일부 융통성이 없습니다. 예를 들어 철자가 틀린 정규 표현식 검색 및 검색을 허용하지만 빠른 것은 아닙니다. 접미사 배열을 기반으로하는 Burrows-Wheeler Transform의 최근 작업은 압축 된 파일 이 전체 텍스트 색인 인 인 압축 알고리즘을 제공합니다. 이 문서의 가장 잘 알려진 버전은 FM-index입니다. 이전 버전의이 기술은 아마도 발표되지 않았다고 들었지만 말입니다.위에 설명 된 다른 기술과는 달리, 문서가 PDF 파일이거나 이와 비슷한 경우에는 실제로 작동하지 않는다고 생각합니다. 각 페이지의 텍스트 버전을 추출하고 색인을 생성하는 것과 동일한 접근 방식을 사용할 수 있지만, 원본 문서를 압축하는 이점을 얻지 못합니다.
내 지인 Tim은 2003 년 블로그 게시물 on search에 대해 아주 훌륭한 입문 서적을 작성했는데, 여전히 꽤 훌륭합니다. 그것들은 (최근의 개발을 제외하고)이 것들을 훨씬 더 깊이 다룬다.
라비 : 당신이 찾고있는 정보입니까?
편집 : 내 서식을 수정 해 주셔서 감사합니다, 마틴!
우선, 직접 제작해야하는 이유가 무엇입니까? Lucene (그리고 .NET 용 NLucene)과 같은 좋은 오픈 소스 프로젝트가 있습니다.이 기능이 많이 내장되어 있습니다. 처음부터 다시 빌드해야하지 않는 한이 도구를 사용하십시오. 그렇게해도 프로젝트와 같은 소스에서 시작합니다. 정말 최고의 검색 기술은 하나도 없습니다. 내용물과 검색 내용에 따라 전체 가방이 있습니다. 자세한 내용을 알려주십시오. –
@ Anthony Anthony 감사합니다. 검색 응용 프로그램을 구현할 수있는 좋은 오픈 소스 프로젝트가 있다는 것을 알고 있습니다. 하지만 처음부터 다시 만들고 싶다고 가정 할 수 있습니다. 특별한 이유가 없습니다. 이전에 물어 보았던 것처럼 이진 검색 트리를 유용하게 사용할 수 있습니까? 나는 이것을 오래 전에 어딘가에서 읽었고 개념을 잊어 버렸기 때문에 이것을 말하고있다. 누군가가 도움을 주는지 우리에게 알려준다. –
Windows Search 4.0, Google 데스크톱 검색 등의 검색 기술은 내부적으로 색인 생성을 사용하고 B + 트리를 사용하며 현재 시장에 현재 존재하는 모든 데이터베이스에서 색인 생성에 주로 사용되므로 더 나은 답변을 얻을 것이라고 생각하지 않습니다. 그리고 정직하게 말하면, 색인 생성을 제외하고 색인 생성의 더 빠른 방법과 성능은 당신이 선택한 알고리즘에 달려 있습니다. –