GroupDocs.Search 네트워크를 Java에서 구성 – 검색 향상

오늘날 데이터 중심 애플리케이션에서 configure groupdocs search network는 방대한 문서 컬렉션에서 빠르고 정확한 결과를 제공하는 핵심 단계입니다. 엔터프라이즈 수준 검색 포털을 구축하든 기존 솔루션을 확장하든, 잘 구성된 GroupDocs.Search 네트워크는 수평 확장을 가능하게 하고 동의어 지원을 추가하며 지연 시간을 낮게 유지합니다. 이 튜토리얼에서는 Java를 사용하여 GroupDocs.Search 네트워크를 설정, 배포 및 미세 조정하는 방법과 인덱스에 동의어를 추가하고 노드 수명 주기를 관리하는 실용적인 팁을 배웁니다.

빠른 답변

  • GroupDocs.Search 네트워크를 구성하는 주요 이점은 무엇인가요? 분산 인덱싱 및 쿼리를 가능하게 하여 성능과 확장성을 향상시킵니다.
  • 예제를 실행하려면 라이선스가 필요합니까? 무료 체험판은 개발에 사용할 수 있으며, 프로덕션에는 상용 라이선스가 필요합니다.
  • 인덱스를 재구축하지 않고 동의어를 추가할 수 있나요? 예—런타임에 동의어 사전을 사용하여 add synonyms to index를 수행합니다.
  • 몇 개의 노드를 배포할 수 있나요? 인프라가 허용하는 만큼 많은 노드를 배포할 수 있으며, 각 노드는 자체 포트에서 실행됩니다.

GroupDocs.Search 네트워크 구성이란?

GroupDocs.Search 네트워크를 구성한다는 것은 여러 JVM 인스턴스가 인덱싱 및 검색을 협업할 수 있도록 폴더 구조, 포트 및 노드 설정을 정의하는 것을 의미합니다. 이 설정은 워커(샤드)를 조정하는 마스터‑노드를 생성하고 전체 데이터셋에 걸쳐 쿼리가 실행되도록 보장합니다.

왜 GroupDocs.Search 네트워크를 구성해야 할까요?

  • Scalability – 인덱싱 부하를 여러 머신에 분산합니다.
  • Reliability – 노드를 다운타임 없이 추가하거나 제거할 수 있습니다.
  • Search relevance – 풍부한 결과를 위해 인덱스에 동의어를 추가합니다.
  • Performance – 병렬 쿼리 실행으로 응답 시간이 감소합니다.

사전 요구 사항

  • Java Development Kit (JDK) 8 이상
  • 프로젝트 빌드를 위한 Maven
  • Java 문법에 대한 기본 지식
  • 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>

또는 최신 버전을 직접 GroupDocs.Search for Java releases에서 다운로드하십시오.

라이선스 획득

  • Free Trial – 비용 없이 핵심 기능을 탐색합니다.
  • Temporary License – 단기 테스트를 위해 전체 기능을 활성화합니다.
  • Commercial License – 프로덕션 배포에 필요합니다.

기본 초기화 및 설정

라이브러리가 올바르게 로드되는지 확인하기 위해 간단한 Java 클래스를 생성합니다:

import com.groupdocs.search.*;

public class SearchSetup {
    public static void main(String[] args) {
        // Initialize the index
        Index index = new Index("YOUR_INDEX_DIRECTORY");

        System.out.println("GroupDocs.Search is ready to use!");
    }
}

GroupDocs.Search 네트워크 구성 단계별 가이드

1. 검색 네트워크 구성

노드 통신을 위한 기본 문서 폴더와 시작 포트를 정의합니다.

import com.groupdocs.search.dictionaries.*;
import com.groupdocs.search.scaling.configuring.*;

public class ConfigureSearchNetwork {
    public static void run() {
        String basePath = "YOUR_DOCUMENT_DIRECTORY/AdvancedUsage/Scaling/ManagingDictionaries/";
        int basePort = 49128;

        Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
        
        // Configuration details and setup logic
    }
}
  • basePath – 사전(예: 동의어 파일)이 위치하는 곳.
  • basePort – 첫 번째 포트; 이후 노드는 이 값에서 증가합니다.

2. 검색 네트워크 노드 배포

동일한 구성을 공유하는 여러 워커 노드를 시작합니다.

import com.groupdocs.search.scaling.*;

public class DeploySearchNetworkNodes {
    public static void run() {
        String basePath = "YOUR_DOCUMENT_DIRECTORY/AdvancedUsage/Scaling/ManagingDictionaries/";
        int basePort = 49128;
        Configuration configuration = new Configuration();

        SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);
        
        // Node deployment logic
    }
}

각 노드는 자체 포트(basePort + index)에서 실행되며 전체 인덱스의 샤드를 보유합니다.

3. 노드 이벤트 구독

마스터 노드에 이벤트 리스너를 연결하여 상태, 인덱싱 진행 상황 및 오류 조건을 모니터링합니다.

import com.groupdocs.search.scaling.*;

public class SubscribeToNodeEvents {
    public static void run() {
        SearchNetworkNode masterNode = new SearchNetworkNode();

        SearchNetworkNodeEvents.subscribe(masterNode);
        
        // Event subscription logic
    }
}

이벤트 콜백을 통해 노드 시작/중지, 인덱싱 완료 및 예상치 못한 실패에 대응할 수 있습니다.

4. 노드 인덱서에 동의어 추가

런타임에 add synonyms to index를 수행하여 관련성을 향상시킵니다.

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

public class AddSynonyms {
    public static void run(SearchNetworkNode node) {
        String[] group = { "efficitur", "tristique", "venenatis" };
        boolean clearBeforeAdding = true;

        Indexer indexer = node.getIndexer();
        int[] indices = node.getShardIndices();
        SynonymDictionary dictionary = indexer.getSynonymDictionary(indices[0]);

        if (clearBeforeAdding) {
            dictionary.clear();
        }
        dictionary.addRange(new String[][] { group });

        indexer.setDictionary(dictionary);
        
        // Synonym addition logic
    }
}
  • group – 동등하게 취급되어야 하는 용어 배열.
  • clearBeforeAdding – 기존 항목을 교체하려면 true로 설정합니다.

5. 인덱싱을 위한 디렉터리 추가

마스터 노드에 검색 가능한 문서가 포함된 폴더를 알려줍니다.

import com.groupdocs.search.scaling.*;
import com.groupdocs.search.examples.Utils;

public class AddDirectoriesForIndexing {
    public static void run(SearchNetworkNode masterNode) {
        String documentsPath = "YOUR_DOCUMENT_DIRECTORY/DocumentsPath";

        IndexingDocuments.addDirectories(masterNode, documentsPath);
        
        // Directory addition logic
    }
}

이 메서드는 디렉터리를 재귀적으로 스캔하고 파일을 샤드에 분배합니다.

6. 네트워크에서 텍스트 검색 수행

모든 노드에 걸쳐 쿼리를 실행하며, 필요에 따라 정확히 일치하는 동작을 강제할 수 있습니다.

import com.groupdocs.search.scaling.*;

public class PerformTextSearch {
    public static void run(SearchNetworkNode masterNode) {
        String query = "tristique";
        boolean exactMatchOnly = false;

        TextSearchInNetwork.searchAll(masterNode, query, exactMatchOnly);
        exactMatchOnly = true;
        TextSearchInNetwork.searchAll(masterNode, query, exactMatchOnly);
        
        // Search execution logic
    }
}

형태소 분석 없이 엄격한 용어 매칭이 필요할 때 exactMatchOnlytrue로 전환합니다.

7. 네트워크 노드 종료

처리가 완료되면 리소스를 정상적으로 해제합니다.

import com.groupdocs.search.scaling.*;

public class CloseNetworkNodes {
    public static void run(SearchNetworkNode[] nodes) {
        for (SearchNetworkNode node : nodes) {
            node.close();
            
            // Node closure logic
        }
    }
}

올바른 종료는 메모리 누수를 방지하고 JVM을 건강하게 유지합니다.

실용적인 적용 사례

ScenarioHow the network helps
Enterprise Search데이터센터 서버에 인덱싱을 분산하여 페타바이트 규모 코퍼스를 처리합니다.
Document Management동의어를 인덱스에 추가하여 사용자가 다양한 용어에도 문서를 찾을 수 있게 합니다.
E‑commerce Catalog지역별 노드를 배포하여 현지화된 제품 검색을 빠르게 제공합니다.
Content Management편집자가 특정 디렉터리에 새 파일을 추가하는 동안에도 콘텐츠를 검색 가능하게 유지합니다.

일반적인 문제 및 해결책

  • Port Conflicts – 각 노드의 포트(basePort + index)가 사용 중이지 않은지 확인하고, 필요하면 basePort를 조정합니다.
  • Synonym Not Applied – 용어를 추가한 후 indexer.setDictionary(dictionary)를 호출했는지 확인합니다.
  • Node Not Responding – 이벤트를 구독하고 NodeFailed 콜백을 확인하여 네트워크 문제를 진단합니다.
  • Memory Leak on Close – 배포된 모든 노드에 대해 항상 node.close()를 호출합니다.

자주 묻는 질문

Q: 여러 노드를 배포하면 검색 성능이 어떻게 향상되나요?
A: 각 노드는 데이터의 샤드를 인덱싱하여 병렬 처리를 가능하게 하고, 작업 부하가 공유되면서 쿼리 지연 시간이 감소합니다.

Q: 기존 문서를 재인덱싱하지 않고 동의어를 추가할 수 있나요?
A: 예, 런타임에 동의어 사전을 통해 add synonyms to index를 수행할 수 있으며, 변경 사항은 새로운 쿼리에 즉시 적용됩니다.

Q: 노드 이벤트 구독이 필수인가요?
A: 기본 동작에 필수는 아니지만, 이벤트 구독을 통해 노드 상태를 파악하고 실패에 신속히 대응할 수 있습니다.

Q: 노드 리소스를 관리하기 위한 모범 사례는 무엇인가요?
A: 유휴 노드를 정기적으로 종료하고, JVM 메모리 사용량을 모니터링하며, 비사용 시간대에 노드를 재활용하여 리소스 소비를 최적화합니다.

Q: GroupDocs.Search가 PDF나 이미지와 같은 비텍스트 형식을 지원하나요?
A: 물론입니다. 라이브러리는 PDF, Office 파일에서 텍스트를 추출하고 이미지에 대해 OCR을 수행하여 바로 검색 가능하게 합니다.


Last Updated: 2026-01-16
Tested With: GroupDocs.Search 25.4 for Java
Author: GroupDocs