왜 스핑크스를 해독하는 속도가 루센인덱스보다 10 배 빠릅니까?

LUCENE 인덱스 구조는 이진 트리 기반 거꾸로 된 b 트리 구조입니다. 즉, 데이터를 인덱스화할 때 검색 및 증분과 같은 이진 트리 기반 거꾸로 된 b 트리 구조를 유지하는 데 어느 정도 시간이 걸리는지 결정합니다. 시간 복잡성은 O(LOGN) 이고 sphinx 는 시간 복잡성이 o (o) 인 해시 해시 해시 트리 기반 거꾸로 된 b 트리 구조입니다 결과 sphinx 의 인덱스 속도는 LUCENE 의 10 배입니다.

첨부: Lucene 역순 색인 원리

Lucene 역방향 정렬 색인 정책

Lucene 은 Apache 소프트웨어 재단 Jakarta 프로젝트 그룹의 서브 프로젝트 [4] 로 고성능 Java 전체 텍스트 검색 프레임워크입니다. Lucene 인덱스 구조의 핵심 부분은 인덱스를 역순으로 정렬하는 것입니다.

예를 들어 역순 정렬을 설명합니다.

두 개의 문장, 즉 :

제 1 조의 내용은 * * 와 중국입니다.

제 2 조의 내용은 중국이다.

1, Lucene 은 색인을 만들기 전에 분사기를 통해 문장 속의 키워드를 찾아낸다. 우리는 일원분사를 예로 들었다. 그럼 1 조의 키워드는 [* *] [와] [국가] 이고, 두 번째 키워드는 [중국] [국가] 입니다.

2, 인덱스 역방향 정렬

분사에서 찾은 대응 관계는 키워드에 대한 문장 매핑이므로 처리 후 결과는 검색에 불리하며 거의 전체 스캔입니다. 그런 다음 Lucene 은 역방향 정렬을 사용하여 색인을 만들고, 이 관계를 키워드와 문장 간의 매핑으로 변환하고, 키워드를 문자열로 정렬합니다. 물론 Lucene 도 문장 안에 키워드가 나타나는 빈도와 위치 등의 정보를 추가했는데, 여기서는 군더더기가 없다. 정렬 결과는 다음 표에 나와 있습니다.

키워드

번호

* * *

국가

1,2

그리고

중간

간단히 말해서, Lucene 의 역정렬은 분사를 문장 위치에 매핑하고 분사에 따라 레코드를 정렬하는 것이다.

이러한 스토리지 구조의 경우 Lucene 은 이진 검색 알고리즘을 사용하여 검색합니다. 이것이 Lucene 이 효율적인 이유 중 하나이다.

이 문서에서는 이분법 알고리즘 (이분법 또는 반검색 알고리즘) 에 대해 간략하게 설명합니다. N 요소 배열의 경우 이진 검색 알고리즘은 최대 1+log2(n) 를 비교합니다. 즉, 2 의 N 승 요소가 있고, 최대 n+ 1 을 비교합니다. 그런 다음1024 *1024 *1024 개 요소, 즉 3 1 회.

단어 분할 필터링 비활성화에 대한 고찰

단어 세분화를 비활성화하는 생각: 사용 안 함 단어 사전을 만듭니다. 이 사전은 사용 안 함 단어입니다 (특수 기호 포함, 정방향 및 역방향의 최대 일치는 고려되지 않음). 그런 다음 금지어 참가자로 분사한 뒤 역순으로 정렬하는 것은 금지어를 문장 위치에 매핑하고 금지어별로 정렬하는 것이다.

예를 들어, * * * 와 중국은 모두 금지어이다.

제 1 항과 제 2 조의 역방향 색인은 다음과 같습니다.

키워드

번호

* * * 중화민국

분명히 인덱스 레코드 수는 비활성화된 단어 수와 같습니다. 이렇게 하면 역방향 인덱스 작성 프로세스를 통해 대상 레코드를 직접 찾을 수 있어 계산 효율성이 크게 향상됩니다.