GroupDocs.Search for .NET 26.10이 이제 제공됩니다. 이는 주요 릴리스이며: 인덱스 형식이 재설계되어 인덱스가 디스크 공간을 적게 차지하고, RAM을 절반만 사용하며 2~4배 빠르게 열립니다. 검색, 삭제, 최적화 및 이미지 검색이 수배에서 수백 배 가속화되고, 검색이 더 이상 인덱싱을 기다리지 않으며, 인덱스 데이터는 체크섬 및 원자적 업데이트로 보호됩니다.

버전 22.7–26.8에서 생성된 기존 인덱스는 재인덱싱 없이 새로운 형식으로 변환됩니다. 이번 릴리스에는 22개의 변경 사항이 포함되어 있습니다: 새로운 기능 4개, 개선 사항 15개, 수정 사항 3개.

성능 하이라이트

대부분의 향상은 인덱스 크기와 세그먼트 수가 커질수록 크게 나타납니다.

항목 26.10에서의 향상
로드된 인덱스에 필요한 RAM 2배 적게
인덱스 열기 2~4배 빠르게
디스크상의 인덱스 크기 인덱싱된 데이터에 비례하여 증가합니다; 인덱스가 클수록 절감 효과가 커집니다
대형 인덱스에서 단어 검색 최대 2배 빠르게; 희귀 단어는 10~40배 빠르게
대형 인덱스에서 퍼지 검색 2.5~5배 빠르게
대형 인덱스에서 와일드카드 검색 2.5~3배 빠르게
와일드카드, 정규식, 숫자 범위 및 청크 기반 퍼지 검색 7~150배 빠르게
날짜 범위 검색 2~27배 빠르게
문서 삭제 수백 배 빠르게, 메모리 4배 적게 사용, 추가 디스크 공간 필요 없음
인덱스 최적화 4배 빠르게, 메모리 4배 적게 사용
인덱싱 중 피크 RAM 2배 적게
문서의 저장된 텍스트 가져오기 최대 15배 빠르게
이미지 검색 데이터 메모리 2.9배 적게, 로드 6.6배 빠르게, 저장 100배 빠르게; 역 이미지 검색은 최대 1.8배 빠르게
인덱스가 수정되는 동안 검색 더 이상 차단되지 않음
인덱스 신뢰성 체크섬 및 원자적 변경; 중단된 작업은 완료되거나 롤백됩니다
검색 스레드 기본적으로 모든 프로세서 코어 사용; 언제든지 변경 가능

이번 릴리스의 새로운 기능

키 요약 카테고리
SEARCHNET-3665 검색 스레드 수를 언제든지 변경할 수 있는 기능 구현 기능
SEARCHNET-3666 짝이 없는 서러게이트 문자 교체 옵션 구현 기능
SEARCHNET-3667 혼합 문자만으로 구성된 용어를 건너뛰는 옵션 구현 기능
SEARCHNET-3668 문서를 재인덱싱하지 않고 새로운 인덱스 형식으로 인덱스 버전 업데이트 구현 기능
SEARCHNET-3669 인덱스의 디스크 공간 사용 최적화 구현 개선
SEARCHNET-3670 로드된 인덱스의 RAM 사용 최적화 구현 개선
SEARCHNET-3671 인덱스 로딩 속도 최적화 구현 개선
SEARCHNET-3672 대형 인덱스에서 검색 속도 최적화 구현 개선
SEARCHNET-3673 퍼지 검색 최적화 구현 개선
SEARCHNET-3674 와일드카드 검색 최적화 구현 개선
SEARCHNET-3675 문서 삭제 및 업데이트 최적화 구현 개선
SEARCHNET-3676 인덱스 최적화 작업 최적화 구현 개선
SEARCHNET-3677 인덱스가 수정되는 동안 검색 허용 개선
SEARCHNET-3678 인덱스 신뢰성 향상 개선
SEARCHNET-3679 인덱싱 중 메모리 사용 최적화 구현 개선
SEARCHNET-3680 문서 텍스트 가져오기 최적화 구현 개선
SEARCHNET-3681 이미지 검색 최적화 구현 개선
SEARCHNET-3682 모든 플랫폼에서 대소문자 처리를 동일하게 구현 개선
SEARCHNET-3688 청크 기반 검색 최적화 구현 개선
SEARCHNET-3683 기본 검색 스레드 수 수정 수정
SEARCHNET-3684 용어 사전 변경 후 일관성 없는 인덱싱 방지 수정
SEARCHNET-3685 텍스트 처리 방식이 다른 인덱스 병합 방지 수정

주요 기능

인덱스 저장 및 신뢰성

  • 인덱스 크기가 이제 인덱싱된 데이터에 비례하여 증가하므로, 많은 세그먼트를 가진 대형 인덱스가 가장 많은 공간을 절감합니다.
  • 로드된 인덱스는 RAM을 절반만 사용하며, 인덱스를 여는 속도는 2~4배 빠릅니다.
  • 인덱스 데이터는 체크섬으로 보호되며, 모든 변경은 원자적으로 적용됩니다. 오류, 전원 장애 또는 프로세스 종료로 작업이 중단되면 인덱스는 이전 일관된 상태를 유지합니다.

검색

  • 쿼리 용어를 포함하는 세그먼트만 읽어들여 단어, 퍼지, 와일드카드 및 청크 검색을 가속화합니다.
  • 검색은 기본적으로 모든 프로세서 코어를 사용하며, IndexSettings.SearchThreads를 통해 언제든지 스레드 수를 변경할 수 있습니다.
  • 검색과 인덱스 수정 작업(인덱싱, 업데이트, 삭제, 병합, 최적화)은 이제 서로 차단하지 않습니다. 각 검색은 인덱스의 일관된 스냅샷을 사용합니다.

인덱싱 및 유지 관리

  • 문서 삭제 시 인덱스를 다시 쓰지 않습니다: 문서는 즉시 검색에서 제외되고 최적화 중에 물리적으로 제거됩니다.
  • 인덱스 최적화는 4배 빠르고 메모리 사용량은 4배 적으며, 매우 큰 인덱스는 제한된 크기의 여러 세그먼트로 최적화됩니다.
  • 인덱싱 시 피크 RAM 사용량이 약 절반 수준입니다.

텍스트 처리

  • 대소문자 처리가 .NET Framework와 .NET에서 동일하게 수행되어 검색 결과가 플랫폼에 의존하지 않습니다.
  • 짝이 없는 서러게이트 문자는 제거되는 대신 U+FFFD로 교체되며, 혼합 문자만으로 구성된 용어는 더 이상 인덱싱되지 않습니다.

공개 API 변경 사항

GroupDocs.Search.IndexSettings 클래스에 두 개의 속성이 추가되었습니다:

  • Boolean ReplaceUnpairedSurrogates – 짝이 없는 UTF-16 서러게이트 문자를 유니코드 대체 문자(U+FFFD)로 교체합니다. 기본적으로 활성화됩니다.
  • Boolean SkipBlendedOnlyTerms – 혼합 문자만으로 구성된 용어를 인덱싱에서 제외합니다. 기본적으로 활성화됩니다.

두 설정은 인덱스 생성 시 고정됩니다.

코드 예제

다음 예제는 이전 버전에서 만든 인덱스를 재인덱싱 없이 새로운 인덱스 형식으로 업데이트합니다.

string sourceIndexFolder = @"c:\MyOldIndex\"; // Specify path to the index of a previous version
string targetIndexFolder = @"c:\MyNewIndex\"; // Specify path to the folder for the updated index

IndexUpdater updater = new IndexUpdater(); // Creating an index updater

if (updater.CanUpdateVersion(sourceIndexFolder)) // Checking whether the index version can be updated
{
    VersionUpdateResult result = updater.UpdateVersion(sourceIndexFolder, targetIndexFolder); // Updating the index version; the source index is not changed
}

업그레이드 시 주의사항

이전 버전에서 업그레이드할 때 다음 변경 사항을 고려하십시오:

  • 인덱스 형식이 변경되었습니다. 이전 버전의 인덱스는 열기 전에 IndexUpdater 클래스를 사용해 변환해야 합니다. 원본 문서는 필요 없으며, 변환된 인덱스는 다른 폴더에 저장되고 원본 인덱스는 수정되지 않습니다.
  • 용어 사전은 인덱스에 문서가 포함된 후 고정됩니다. 알파벳, 토큰화 사전, 문자 교체, 불용어, 그리고 UseStopWords와 UseCharacterReplacements 설정은 첫 번째 문서를 인덱싱하기 전에 구성해야 합니다. 이후 변경 시 InvalidOperationException이 발생합니다.
  • 호환되지 않는 인덱스는 병합되지 않습니다. 병합된 인덱스가 텍스트를 다르게 분할하면 Index.Merge가 InvalidOperationException을 발생시킵니다.
  • 검색은 기본적으로 다중 스레드입니다. 기본 IndexSettings.SearchThreads 설정으로 검색은 프로세서 코어 수만큼의 스레드를 사용합니다. 스레드 수를 제한하려면 해당 속성을 명시적으로 설정하십시오.
  • 두 개의 새로운 인덱스 설정이 기본적으로 활성화됩니다. 이전 동작을 유지하려면 인덱스를 만들기 전에 ReplaceUnpairedSurrogates와 SkipBlendedOnlyTerms를 false로 설정하십시오.
  • 삭제된 문서는 최적화 중에 물리적으로 제거됩니다. 공간을 회수하려면 Index.Optimize를 호출하십시오.
  • 청크 수가 변경되었습니다. 청크 기반 검색은 이제 각 세그먼트마다 청크를 반환하지 않습니다. 세그먼트 수에 의존하지 말고 SearchResult.NextChunkSearchToken이 null이 아닐 때까지 청크를 반복하십시오.

업데이트 받는 방법

NuGet

  • NuGet – 최신 패키지를 설치합니다:
# Package Manager
NuGet\Install-Package GroupDocs.Search -Version 26.10.0

# .NET CLI
dotnet add package GroupDocs.Search --version 26.10.0
# Package Manager
NuGet\Install-Package GroupDocs.Search.NETFramework -Version 26.10.0

# .NET CLI
dotnet add package GroupDocs.Search.NETFramework --version 26.10.0

직접 다운로드

리소스