lucene은 문서를 어떻게 설치 색인?
Lucene에 대한 문서를 읽었습니다. 또한이 링크 ( http://lucene.sourceforge.net/talks/pisa ) 의 문서를 읽었습니다 .
Lucene이 문서를 색인화하는 방법을 이해하지 않고 Lucene이 색인화에 사용하는 알고리즘을 이해하지 못할까요?
위 링크에서 Lucene은 색인화 에이 알고리즘을 사용합니다.
- 증분 알고리즘 :
- 세그먼트 강화 스택 유지
- 각 문서에 대한 색인 생성
- 스택에 새 강화 푸시
- b = 10을 병합 인자로. M = 8
for (size = 1; size < M; size *= b) {
if (there are b indexes with size docs on top of the stack) {
pop them off the stack;
merge them into a single index;
push the merged index onto the stack;
} else {
break;
}
}
이 알고리즘은 최적화 된 인덱싱을 어떻게 제공합니까?
Lucene은 인덱싱을 위해 B- 트리 알고리즘 또는 이와 다른 알고리즘을 사용합니까? 아니면 어느 하나의 알고리즘이 있습니까?
여기에 상당히 좋은 기사가 있습니다 : https://web.archive.org/web/20130904073403/http://www.ibm.com/developerworks/library/wa-lucene/
2014 년 12 월 편집 : 원본이 삭제되어 보관 된 버전으로 업데이트되었습니다. 아마도 가장 최근의 대안은 http://lucene.apache.org/core/3_6_2/fileformats.html입니다.
http://lucene.apache.org/core/4_10_2/core/org/apache/lucene/codecs/lucene410/package-summary.html#package_description에 더 최신 버전이 정보가 약간 것입니다. 더 오래된 것보다.
간단히 말해서, lucene이 문서를 색인화하면 문서를 여러 용어로 나눕니다. 그런 다음 각 용어가 포함 된 문서와 색인 파일에 용어를 저장합니다. 해시 테이블과 생각할 수 있습니다.
용어는 각 단어를 어근 형태로 추출하는 분석기를 사용하여 생성합니다. 영어에서 가장 널리 사용되는 형태소 분석 알고리즘은 Porter 형태소 분석 알고리즘입니다. http://tartarus.org/~martin/PorterStemmer/
쿼리가 실행되는 수준을 작성하는 데 사용되는 분석기를 통해 처리 된 다음과 일치하는 용어를 조회하는 데 사용됩니다. 그러면 쿼리와 일치하는 문서 목록이 제공됩니다.
간단히 말해서 Lucene은 디스크의 Skip-Lists 를 사용하여 반전 된 화면을 빌드 한 다음 FST ( 유한 상태 변환기)를 사용하여 계획된 용어 에 대한 매핑을 메모리에 로드합니다 . 그러나 Lucene 은 Lucene의 인덱싱 시스템을 직접 만든 Michael McCandless가 모든 인덱싱 된 용어를 RAM에로드하지 않습니다 . Skip-Lists를 사용하면 수준을 한 적중에서 다른 적중으로 순회 할 수 있으므로 집합 및 특히 범위 쿼리가 가능합니다 (B- 트리와 매우 유사 함). 그리고 Skip-Lists 색인화에 대한 Wikipedia 항목은 Lucene의 Skip-List 구현이 다중 레벨 이라고 불리는 이유를 설명 합니다.Skip-List- 본질적으로 O(log n)
조회를 할 수 있습니다. (다시 말하지만 B- 트리와 매우 유사 함).
따라서 Skip-List 데이터 구조를 기반으로하는 반전 된 (용어) 의가 문서에서 빌드 한대로 디스크에 저장됩니다. 그런 다음 Lucene 은 Morfologick에서 느슨하게 영감 을 받은 FST 구현에서 Finite State Transducer에 해당 용어를로드합니다 (이미 말했듯이 : 아마도 일부만) .
Michael McCandless (또한)는 Lucene이 (최소 비순환) FST 를 사용하여 Lucene이 메모리에 저장하는 용어를 기본적으로 색인화하는 방법과 이유를 훌륭하고 간결하게 설명하고 FST 가 SortedMap<ByteSequence,SomeOutput>
작동하는 방법에 기본 아이디어를 제공합니다. (즉, FST가 바이트 시퀀스 [즉, 색인 된 용어]를 압축 하여이 매핑의 메모리가 부선 형적으로 증가하는 방법). 그리고 그는 Lucene이 사용 하는 특정 FST 알고리즘을 설명하는 논문도 지적합니다 .
대부분의 데이터베이스는 (B +를) 사용하는 동안 루씬은, 건너 뛰기-목록을 사용하는 이유는 그 호기심을 위해-및 / 또는 (B)를-트리, 한 번 봐도 바로 SO 답변 이 질문에 ( B- 나무 대 건너 뛰기-목록)에 관한합니다. 그 대답은 훌륭하고 깊은 설명을 제공합니다. 으로 본질적 인덱스의 동시 업데이트를 "더 적절하게"만들지는 그렇게 않습니다 (왜냐하면 B- 트리를 즉시 재조정하지 않기로 결정할 수 있기 때문입니다 . 건너 뛰기-목록) 대신 건너 뛰기-목록을 사용하면를 밸런싱 작업 (지연 여부에 관계 없이) 작업을 하지 않아도 됩니다. (궁극적으로) B- 트리가 필요로합니다 (하나 사실 답변에서 알 수 단계 B- 트리와 [다] Skip-Lists 중가 "올바른 작업"인 경우 성능 차이가 거의 없습니다.)
색인 자체보다 색인 병합에 대한 질문이 더 많은 것입니다.
낮은 수준의 세부 정보를 무시하면 인덱싱 프로세스가 매우 간단합니다. Lucene은 문서에서 "역 색인"이라고하는 것을 형성합니다. 따라서 텍스트가 "되든 아니든"이고 id = 1 인 문서가 들어 오면 반전 된 정책은 다음과 가능합니다.
[to] → 1
[be] → 1
[or] → 1
[not] → 1
이것은 기본적으로 단어에서 주어진 단어를 포함하는 문서 목록 에 대한 색인입니다 . 이 색인 (단어)의 각 줄을 게시 목록이라고합니다. 이 공사는 장기 저장소에 유지됩니다.
물론 실제로 상황은 더 복잡합니다.
- Lucene은 주어진 특정 분석기에 따라 일부 단어를 건너 뛸 수 있습니다.
- 언어의 유연성을 줄이기 위해 형태소 분석 알고리즘을 사용하여 단어를 사전 처리 할 수 있습니다.
- 게시 목록은 문서의 식별자뿐만 아니라 문서 내에서 주어진 단어의 오프셋 (잠재적으로 여러 인스턴스) 및 기타 추가 정보를 포함 할 수 있습니다.
기본적인 이해에 그렇게 중요하지 않은 더 많은 합병증이 있습니다.
하지만 Lucene 색인은 추가 전용 이라는 것을 이해하는 것이 중요 합니다 . 어떤 시점에서 애플리케이션은 인덱스의 모든 변경 사항을 커밋 (게시)하기로 결정합니다. Lucene은 색인을 사용하여 모든 서비스 작업을 완료하고 닫으므로 검색에 사용할 수 있습니다. 커밋 후 인덱스는 기본적으로 불변입니다. 이 색인 (또는 색인 부분)을 세그먼트 라고 합니다 . Lucene이 쿼리 검색을 실행하면 사용 가능한 모든 세그먼트에서 검색합니다.
따라서 이미 색인 된 문서를 어떻게 변경할 수 있습니까?
새 문서 또는 이미 인덱싱 된 문서의 새 버전은 새 세그먼트에서 인덱싱되고 소위 kill list를 사용하여 이전 세그먼트에서 무효화 된 이전 버전이 인덱싱 됩니다 . Kill list는 변경 될 수있는 커밋 된 인덱스의 유일한 부분입니다. 짐작할 수 있듯이 오래된 인덱스에는 대부분 제거 된 문서가 포함될 수 있으므로 인덱스 효율성은 시간이 지남에 따라 떨어집니다.
병합이 시작되는 곳입니다. 병합 – 전체적으로보다 효율적인 인덱스를 만들기 위해 여러 인덱스를 결합하는 프로세스입니다. 병합 중에 기본적으로 발생하는 것은 라이브 문서가 새 세그먼트에 복사되고 이전 세그먼트가 완전히 제거되는 것입니다.
이 간단한 프로세스를 사용하여 Lucene은 검색 성능 측면에서 인덱스를 양호한 상태로 유지할 수 있습니다.
도움이 되길 바랍니다.
그것은되는 인덱스를 반전 ,하지만 그것을 사용하는 구조 지정하지 않습니다. lucene의 인덱스 형식 에는 완전한 정보가 있습니다.
'파일 확장자 요약'으로 시작하십시오.
먼저 다양한 인덱스에 대해 이야기하고 있음을 알 수 있습니다. 엄밀히 말하면 B- 트리를 사용하는 것은 아니지만 유사점이 있습니다. 위의 구조는 나무와 비슷합니다.
참고 URL : https://stackoverflow.com/questions/2602253/how-does-lucene-index-documents
'IT' 카테고리의 다른 글
numpy 배열로 보시겠습니까? (0) | 2020.09.13 |
---|---|
Sass에서 @include 대 @extend 사용? (0) | 2020.09.12 |
NuGet의 패키지를 버전 제어에 체크인 하시겠습니까? (0) | 2020.09.12 |
고해상도 화면을 시뮬레이션하는 방법은 무엇입니까? (0) | 2020.09.12 |
훌륭한에서의 str 성능 (0) | 2020.09.12 |