java 전체 텍스트 검색을 GroupDocs.Search로 구현하는 방법

데이터 기반 애플리케이션 시대에 java full text search는 방대한 문서 컬렉션을 즉시 검색 가능한 지식 베이스로 전환하는 데 필수적입니다. 엔터프라이즈 급 포털을 구축하든 가벼운 데스크톱 유틸리티를 만들든, 잘 구성된 검색 네트워크는 쿼리 지연 시간을 초에서 밀리초로 줄이고 데이터가 증가함에 따라 결과의 관련성을 유지합니다. 이 튜토리얼에서는 GroupDocs.Search for Java를 배포하고, 검색할 파일을 추가하고, 노드의 디렉터리를 구성하며, 실시간 인덱싱을 활성화하여 인덱스가 수동 개입 없이 최신 상태를 유지하도록 하는 방법을 단계별로 안내합니다.

왜 중요한가: java full text search 인덱스는 쿼리 지연 시간을 줄이고, 데이터 양에 따라 확장되며, 모든 Java 기반 솔루션—웹 포털, 데스크톱 앱, 클라우드 마이크로서비스—에 강력한 전체 텍스트 기능을 제공합니다.

빠른 답변

  • GroupDocs.Search의 주요 목적은 무엇인가요? 확장 가능한 java 검색 엔진을 제공하여 분산 네트워크 전반에 걸쳐 문서를 인덱싱하고 검색합니다.
  • 어떤 버전을 사용해야 하나요? 새 프로젝트에는 최신 안정 버전(예: 25.4)을 권장합니다.
  • 라이선스가 필요합니까? 30일 무료 체험을 제공하며, 프로덕션 사용을 위해서는 영구 라이선스가 필요합니다.
  • 파일과 전체 디렉터리를 모두 추가할 수 있나요? 예 – addFiles와 addDirectories 도우미를 사용하여 콘텐츠를 수집합니다.
  • 필요한 Java 버전은 무엇인가요? Java 8 이상이며, 의존성 관리를 위해 Maven이 필요합니다.
  • 실시간 인덱싱 java는 어떻게 작동하나요? 노드 이벤트를 구독하면 파일이 변경될 때 자동으로 재인덱싱을 트리거할 수 있습니다.

“create searchable index java”란 무엇인가요?

Java에서 검색 가능한 인덱스를 생성한다는 것은 용어를 해당 용어를 포함하는 문서에 매핑하는 데이터 구조를 구축하여 빠른 전체 텍스트 쿼리를 가능하게 하는 것을 의미합니다. GroupDocs.Search for Java는 복잡한 작업을 추상화하여 문서를 제공하고 검색 동작을 조정하는 데 집중할 수 있게 합니다.

왜 GroupDocs.Search for Java를 사용하나요?

GroupDocs.Search는 수평 확장이 가능한 java 검색 엔진을 제공하며, 50가지 이상의 입력 및 출력 형식을 지원하고 이벤트 기반 인덱싱을 제공합니다. 여러 노드를 배포하면 인덱싱 작업 부하가 분산되고, 내장된 상태 검사로 네트워크 신뢰성을 유지합니다. 또한 RESTful API와 맞춤형 분석기를 제공하여 세밀한 관련성을 조정할 수 있습니다.

사전 요구 사항

  • **JDK 8+**가 개발 머신에 설치되어 있어야 합니다.
  • IntelliJ IDEA 또는 Eclipse와 같은 IDE.
  • Java와 Maven에 대한 기본 지식.
  • GroupDocs.Search for Java 라이브러리에 접근할 수 있어야 합니다 (다운로드 또는 Maven).

GroupDocs.Search for Java 설정

Maven 의존성

pom.xml에 저장소와 의존성을 추가합니다:

<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>

Pro tip: 공식 릴리스 페이지를 확인하여 버전 번호를 최신 상태로 유지하세요.

공식 사이트에서 JAR 파일을 직접 다운로드할 수도 있습니다: GroupDocs.Search for Java releases.

라이선스 획득

  • 무료 체험: 30일 평가.
  • 임시 라이선스: 연장 테스트를 위해 요청.
  • 구매: 프로덕션 배포에 필요합니다.

기본 초기화

인덱스 파일이 저장될 폴더를 가리키고 기본 통신 포트를 정의하는 구성 객체를 생성합니다:

import com.groupdocs.search.Configuration;

class InitializeSearch {
    public static void main(String[] args) {
        String basePath = "your/base/path";
        int basePort = 8080;
        
        Configuration config = new ConfiguringSearchNetwork().configure(basePath, basePort);
        // Use this configuration for subsequent operations
    }
}

GroupDocs.Search로 searchable index java를 만드는 방법

SearchConfiguration 객체를 로드하고, SearchNetworkNode를 시작한 뒤 node.getIndexer().addFiles(...)를 호출하여 인덱스를 채웁니다. 이 한 줄 패턴은 완전한 기능을 갖춘 java 전체 텍스트 검색 네트워크를 부팅하여 즉시 쿼리를 받을 준비가 됩니다. 동일한 base path와 포트 범위를 공유하는 노드를 추가함으로써 확장할 수 있습니다.

기능 1 – 구성 및 네트워크 설정

SearchConfiguration 클래스는 노드를 시작하는 데 필요한 모든 설정을 보유합니다.

import com.groupdocs.search.Configuration;
import com.groupdocs.search.scaling.*;

class ConfiguringSearchNetwork {
    public static Configuration configure(String basePath, int basePort) {
        // Configure the search network with specified base path and port
        return new Configuration(basePath, basePort);
    }
}
  • basePath – 인덱스 데이터가 지속될 디렉터리.
  • basePort – 시작 포트; 각 노드는 이 값에서 증가합니다.

기능 2 – 검색 네트워크 노드 배포

SearchNetworkNode는 어떤 머신에서도 실행될 수 있는 개별 인덱싱 서비스를 나타냅니다.

import com.groupdocs.search.scaling.*;

class SearchNetworkDeployment {
    public static SearchNetworkNode[] deploy(String basePath, int basePort, Configuration configuration) {
        // Deploy nodes based on the provided configuration
        return new SearchNetworkNode[]{new SearchNetworkNode()};
    }
}

SearchNetworkNode는 인덱스를 호스팅하고, 추가/제거 이벤트를 처리하며, 검색 쿼리에 응답하는 핵심 런타임 구성 요소입니다. 여러 노드를 배포하면 수평 확장이 가능한 create java full text search 클러스터를 만들 수 있습니다.

기능 3 – 노드 이벤트 구독

실시간 업데이트는 인덱스를 파일 시스템 변경과 동기화합니다.

import com.groupdocs.search.scaling.*;

class SearchNetworkNodeEvents {
    public static void subscribe(SearchNetworkNode node) {
        // Logic to subscribe to the specified node's events
    }
}

이벤트를 수신함으로써 새 파일이 도착할 때 자동으로 재인덱싱을 트리거할 수 있어, 수동 스크립트 없이 event driven indexing을 구현할 수 있습니다.

기능 4 – 네트워크 노드에 디렉터리 추가

이 도우미를 사용하여 add directories to node를 수행하면, 지원되는 모든 문서를 재귀적으로 수집합니다.

import java.io.File;
import java.util.ArrayList;

class DirectoryAdder {
    public static void addDirectories(SearchNetworkNode node, String... directoryPaths) {
        ArrayList<String> files = new ArrayList<>();
        for (String directoryPath : directoryPaths) {
            final File folder = new File(directoryPath);
            listFiles(folder, files);
        }
        addFiles(node, files.toArray(new String[0]));
    }

    private static void listFiles(final File folder, ArrayList<String> list) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFiles(fileEntry, list);
            } else {
                list.add(fileEntry.getPath());
            }
        }
    }
}

기능 5 – 네트워크 노드에 파일 추가

세밀한 제어가 필요할 때는 add files to search를 개별적으로 사용합니다:

import com.groupdocs.search.Document;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import org.apache.commons.io.FilenameUtils;
import com.groupdocs.search.Indexer;
import com.groupdocs.search.options.*;

class FileAdder {
    public static void addFiles(SearchNetworkNode node, String... filePaths) {
        try {
            InputStream[] streams = new FileInputStream[filePaths.length];
            Document[] documents = new Document[filePaths.length];
            for (int i = 0; i < filePaths.length; i++) {
                String filePath = filePaths[i];
                InputStream stream = new FileInputStream(filePath);
                streams[i] = stream;
                
                // Create a document from the input stream
                String fileName = FilenameUtils.getName(filePath);
                String extension = "." + FilenameUtils.getExtension(filePath);
                Document document = Document.createFromStream(
                    fileName,
                    new Date(),
                    extension,
                    stream);
                documents[i] = document;
            }

            // Initialize the indexer and configure options
            Indexer indexer = node.getIndexer();
            IndexingOptions options = new IndexingOptions();
            options.setUseRawTextExtraction(false);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

일반적인 사용 사례

  • 엔터프라이즈 문서 포털은 수천 개의 PDF 및 Office 파일에 대한 즉시 검색이 필요합니다.
  • 법률 e‑discovery 플랫폼은 새로운 증거가 지속적으로 추가되며 실시간으로 검색 가능해야 합니다.
  • 콘텐츠 관리 시스템은 이미지, 프레젠테이션, 스프레드시트를 저장하고 전체 텍스트 조회가 필요합니다.

일반적인 문제 및 해결책

IssueReasonFix
검색 결과에 문서가 표시되지 않음인덱스가 커밋되지 않음node.getIndexer().commit()을 파일 추가 후 호출합니다.
포트 충돌 오류basePort를 다른 서비스가 사용 중다른 basePort를 선택하거나 사용 가능한 포트를 확인하세요.
지원되지 않는 파일 형식라이브러리에 파서가 없음파일 확장자가 지원되는지 확인하거나 사용자 정의 추출기를 추가하세요.

문제 해결 팁

  • 노드 상태 확인: 내장된 상태 검사 엔드포인트(http://localhost:{port}/health)를 사용하여 각 노드가 실행 중인지 확인합니다.
  • 메모리 사용량 모니터링: 대량 문서 배치는 메모리 사용량을 급증시킬 수 있으므로, 작은 청크로 인덱싱하고 주기적으로 commit()을 호출합니다.
  • 로그 확인: GroupDocs.Search는 basePath 폴더에 상세 로그를 기록합니다—파싱 오류나 네트워크 타임아웃을 확인하세요.

자주 묻는 질문

Q: 클라우드 기반 Java 애플리케이션에서 GroupDocs.Search를 사용할 수 있나요?
A: 예. 라이브러리는 모든 Java 런타임에서 작동하며, basePath를 네트워크 마운트 폴더나 클라우드 스토리지 마운트에 지정할 수 있습니다.

Q: 파일이 변경될 때 인덱스를 어떻게 업데이트하나요?
A: 노드 이벤트를 구독하고(Feature 3 참조) 변경된 경로에 대해 addFiles 또는 addDirectories를 다시 호출합니다.

Q: 배포할 수 있는 노드 수에 제한이 있나요?
A: 실질적으로 제한은 하드웨어와 네트워크 대역폭에 따라 결정됩니다. API에는 명시적인 제한이 없습니다.

Q: 새 파일을 추가한 후 노드를 재시작해야 하나요?
A: 아니요. 파일 추가 시 자동으로 인덱싱이 트리거되며, 작업을 연기한 경우에만 커밋이 필요합니다.

Q: 기본적으로 지원되는 문서 형식은 무엇인가요?
A: PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, TXT, HTML 및 다양한 이미지 형식 등 총 50가지 이상을 지원합니다.

Q: 지속적으로 업로드가 이루어지는 폴더에 대해 실시간 인덱싱 java를 어떻게 활성화할 수 있나요?
A: java.nio.file.WatchService와 같은 파일 시스템 감시자를 구현하여 새 파일이 감지될 때마다 DirectoryAdder.addDirectories(node, path)를 호출합니다.


마지막 업데이트: 2026-09-27
테스트 환경: GroupDocs.Search for Java 25.4
작성자: GroupDocs

관련 튜토리얼