Java 검색 결과 강조 – 동기식 및 비동기 인덱싱
이 가이드에서는 GroupDocs.Search 라이브러리를 사용하여 Java 검색 결과 강조하는 방법을 배우고, Java 문서를 동기식 및 비동기식으로 인덱싱하는 과정을 단계별로 확인할 수 있습니다. 작은 데스크톱 도구를 만들든 대규모 엔터프라이즈 검색 서비스를 구축하든, 이러한 기술을 통해 애플리케이션 스레드를 차단하지 않고 즉시 시각적으로 명확한 일치를 제공할 수 있습니다.
빠른 답변
- “highlight search results Java”가 의미하는 것은 무엇인가요? 반환된 스니펫에서 일치하는 각 용어를 마크업(예:
<mark>)으로 감싸는 것으로, 사용자가 히트된 컨텍스트를 즉시 확인할 수 있게 합니다. - 동기식 인덱싱은 언제 사용해야 하나요? 문서를 추가하는 즉시 검색 가능해야 하는 소규모~중간 규모 컬렉션에 사용합니다.
- 비동기식 인덱싱이 더 적합한 경우는 언제인가요? 대용량 배치이거나 인덱스가 백그라운드에서 구축되는 동안 UI 스레드가 응답성을 유지해야 할 때 선택합니다.
- 라이선스가 필요합니까? 무료 체험판은 개발에 사용할 수 있으며, 정식 라이선스를 구매하면 제한이 해제되고 고급 기능을 사용할 수 있습니다.
- 지원되는 Java 버전은 무엇인가요? Java 8 이상.
“highlight search results Java”란 무엇인가요?
highlight search results java는 GroupDocs.Search에서 얻은 원시 매치 데이터를 가져와 각 찾은 용어 주변에 시각적 표시(보통 HTML <mark> 태그)를 삽입하는 과정입니다. 이를 통해 결과 스니펫을 웹 페이지나 Swing 컴포넌트에서 즉시 읽을 수 있게 하여, 쿼리가 정확히 어디에 나타나는지 보여줌으로써 사용자 경험을 향상시킵니다.
Java용 GroupDocs.Search를 사용하는 이유
GroupDocs.Search는 초당 최대 5 000개의 문서를 처리하고, 30개 이상의 파일 형식을 지원하며, 전체 코퍼스를 메모리에 로드하지 않고도 1천만 개 문서 컬렉션을 인덱싱할 수 있는 고성능 언어에 구애받지 않는 엔진을 제공합니다. 내장된 하이라이팅, 실시간 인덱싱 및 다국어 분석기는 콘텐츠 관리 시스템, 전자상거래 카탈로그, 엔터프라이즈 문서 저장소에 이상적입니다.
전제 조건
- Java Development Kit (JDK 8 이상)이 설치되어 있고
JAVA_HOME이 올바르게 설정되어 있어야 합니다. - IntelliJ IDEA 또는 Eclipse와 같은 IDE.
- 인덱싱하려는 파일(예:
documents/)이 들어 있는 폴더—일반 텍스트, PDF, DOCX 등. - 의존성 관리를 위한 Maven(또는 JAR을 수동으로 추가할 수도 있음).
필수 라이브러리 및 의존성
Maven pom.xml에 GroupDocs.Search를 추가합니다:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/search/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>25.4</version>
</dependency>
</dependencies>
직접 다운로드하려면 최신 버전을 GroupDocs.Search for Java releases에서 받으세요.
환경 설정
JAVA_HOME이 호환되는 JDK를 가리키는지 확인합니다.- 새 Maven 프로젝트를 생성하고 위 스니펫을
<dependencies>섹션에 붙여넣습니다. src/main/resources/documents/와 같은 디렉터리에 샘플 파일을 배치합니다.
Java용 GroupDocs.Search 설정 방법
Index는 디스크에 저장된 검색 가능한 컬렉션을 나타내는 핵심 클래스입니다.
디스크의 폴더를 가리키는 Index 인스턴스를 생성하고, 라이선스가 있다면 적용하며, 필요에 따라 언어별 토큰화를 위한 분석기를 구성합니다. 이 준비 단계는 엔진이 인덱스를 효율적으로 읽고, 쓰고, 검색할 수 있도록 보장합니다.
Index 클래스는 디스크에 저장된 검색 가능한 컬렉션을 나타내는 핵심 구성 요소입니다. 인스턴스를 만든 후에는 모든 인덱싱 및 쿼리 작업이 이 객체를 통해 수행됩니다.
- 라이브러리 설치 – 위 Maven 스니펫을 사용하거나 GroupDocs에서 JAR을 다운로드합니다.
- 라이선스 획득 – 체험 라이선스로 시작하고, 배포 전에 정식 키로 교체합니다.
- 인덱스 초기화 – 다음 스니펫은 인덱스 폴더를 생성(또는 열기)하는 방법을 보여줍니다:
import com.groupdocs.search.Index;
// Create an index in the specified folder
Index index = new Index("path/to/index/folder");
Java 검색 결과 강조 – 동기식 인덱싱
DocumentHighlighter는 검색 결과에서 강조된 스니펫을 생성하는 유틸리티 클래스입니다.
인덱스를 로드하고 index.add(documentPath)로 문서를 추가한 뒤 쿼리를 실행하고, DocumentHighlighter를 호출하여 매치를 <mark> 태그로 감쌉니다. 전체 과정이 호출 스레드에서 실행되므로 add가 반환된 직후 문서를 즉시 검색할 수 있게 됩니다.
단계 1: 인덱스를 생성하고 오류 처리를 연결
import com.groupdocs.search.*;
import com.groupdocs.search.events.*;
import java.nio.file.Paths;
public class SynchronousIndexingFeature {
public static void main(String[] args) {
String indexFolder = "YOUR_DOCUMENT_DIRECTORY/SynchronousIndexing";
String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path
Index index = new Index(indexFolder);
// Handle errors
index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
@Override
public void invoke(Object sender, IndexErrorEventArgs args) {
System.out.println(args.getMessage());
}
});
단계 2: 문서를 추가하고 검색 실행
// Add documents
index.add(documentsFolder);
// Perform a search
String query = "tincidunt";
SearchResult result = index.search(query);
단계 3: 결과를 처리하고 Java 검색 결과를 강조
for (int i = 0; i < result.getDocumentCount(); i++) {
FoundDocument document = result.getFoundDocument(i);
System.out.println(": Document: " + document.getDocumentInfo().getFilePath());
System.out.println(": Occurrences: " + document.getOccurrenceCount());
}
// Highlight results
if (result.getDocumentCount() > 0) {
FoundDocument document = result.getFoundDocument(0);
String path = YOUR_OUTPUT_DIRECTORY + "/Highlighted.html";
OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, path);
DocumentHighlighter highlighter = new DocumentHighlighter(outputAdapter);
index.highlight(document, highlighter);
}
}
}
Java 검색 결과 강조 – 비동기 인덱싱
IndexingOptions는 인덱싱 프로세스가 동기식 또는 비동기식 모드로 실행되는 방식을 구성합니다.
IndexingOptions를 백그라운드 모드로 설정하고 StatusChanged 이벤트를 구독하면 UI가 다른 요청을 처리하는 동안 엔진이 파일을 인덱싱합니다. 상태가 Ready로 변하면 동기식 모드와 동일하게 검색을 실행하고 강조된 스니펫을 얻을 수 있습니다.
AsyncIndexingListener는 진행 상황 업데이트를 받아 메인 스레드를 차단하지 않고 진행 바를 표시하거나 상태를 로그에 기록할 수 있게 합니다.
단계 1: 이벤트 리스너와 함께 인덱스 설정
import com.groupdocs.search.*;
import com.groupdocs.search.events.*;
public class AsynchronousIndexingFeature {
public static void main(String[] args) {
String indexFolder = "YOUR_DOCUMENT_DIRECTORY/AsynchronousIndexing";
String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path
Index index = new Index(indexFolder);
// Handle errors and status changes
index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
@Override
public void invoke(Object sender, IndexErrorEventArgs args) {
System.out.println(args.getMessage());
}
});
index.getEvents().StatusChanged.add(new EventHandler<BaseIndexEventArgs>() {
@Override
public void invoke(Object sender, BaseIndexEventArgs args) {
if (args.getStatus() != IndexStatus.Ready || args.getStatus() == IndexStatus.Failed) {
System.out.println("Indexing completed.");
}
}
});
단계 2: 비동기 모드 활성화 및 인덱싱 시작
// Set up async indexing options
IndexingOptions options = new IndexingOptions();
options.setAsync(true);
// Add documents asynchronously
index.add(documentsFolder, options);
}
}
Java 문서 인덱싱 – 실용 팁
index.update(path)는 지정된 경로의 파일로 인덱스에 있는 기존 문서를 업데이트합니다.
대규모 컬렉션을 1 000~5 000개 파일 단위의 배치로 나누고, 불필요한 파싱을 방지하기 위해 확장자로 필터링하며, 전체 인덱스를 재구성하는 대신 변경된 파일에 대해 index.update(path)를 사용합니다. 이러한 방법은 메모리 사용량을 낮게 유지하고 인덱싱 시간을 예측 가능하게 하여 일관성을 유지합니다.
- 배치 크기: 대규모 컬렉션의 경우 메모리 급증을 방지하기 위해 폴더를 더 작은 배치로 나눕니다.
- 파일 필터:
IndexingOptions.setFileExtensions를 사용하여 필요한 형식(예:.pdf,.docx)만 포함합니다. - 재인덱싱: 문서가 변경되면 인덱스를 처음부터 다시 만들지 말고
index.update(documentPath)를 호출합니다.
성능 고려 사항
- 메모리: 힙 사용량을 모니터링하고, 동시에 많은 대용량 파일을 처리할 경우
-Xmx를 늘립니다. - CPU: 비동기 인덱싱은 작업을 여러 스레드에 분산하지만 여전히 CPU를 사용합니다—JVisualVM으로 사용량을 추적하세요.
- 결과 하이라이팅: 하이라이팅은 약간의 오버헤드(결과당 ≈ 2–5 ms)를 추가합니다. 동일한 스니펫을 반복해서 표시해야 할 경우 생성된 HTML을 캐시하세요.
자주 묻는 질문
Q: 동일한 애플리케이션에서 동기식과 비동기식 인덱싱을 결합할 수 있나요?
A: 예. 작은 규모이면서 자주 업데이트되는 세트에는 동기식 인덱싱을 사용하고, 대량 임포트나 백그라운드 작업에는 비동기식 인덱싱을 사용합니다.
Q: 하이라이트 스타일을 어떻게 커스터마이즈하나요?
A: 매치된 용어 주변에 원하는 HTML, CSS 또는 XML 태그를 삽입하는 맞춤형 DocumentHighlighter 구현을 제공하면 됩니다.
Q: GroupDocs.Search가 기본적으로 지원하는 파일 유형은 무엇인가요?
A: 텍스트, PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, HTML 등이며, 내장 파서 덕분에 30개가 넘는 형식을 지원합니다.
Q: 여러 언어를 동시에 검색할 수 있나요?
A: 물론 가능합니다. GroupDocs.Search에는 다국어 분석기가 포함되어 있으므로 인덱스를 생성할 때 적절한 Analyzer를 구성하면 됩니다.
Q: 인덱스 폴더를 어떻게 보호하나요?
A: 인덱스를 보호된 디렉터리에 저장하고, 파일 시스템 권한을 엄격히 설정하며, 필요하면 라이브러리의 보안 기능을 사용해 인덱스를 암호화합니다.
Last Updated: 2026-09-11
Tested With: GroupDocs.Search 25.4 for Java
Author: GroupDocs