GroupDocs.Search 가이드를 통한 Java 속성 검색

현대의 문서 중심 애플리케이션에서는 텍스트 내용뿐만 아니라 부서, 기밀 수준, 생성 날짜와 같은 사용자 정의 메타데이터로 파일을 찾는 경우가 많습니다. Search by attribute java는 단일 고성능 쿼리로 이러한 기능을 제공합니다. 이 튜토리얼에서는 이미 인덱싱된 파일의 속성을 일괄 업데이트하는 방법, 인덱싱 중에 속성을 주입하는 방법, 그리고 GroupDocs.Search for Java 라이브러리를 사용하여 메타데이터로 문서를 효율적으로 조회하는 방법을 살펴봅니다.

빠른 답변

  • What is “search by attribute java”? 각 인덱싱된 문서에 첨부된 키‑값 메타데이터로 검색 결과를 필터링할 수 있습니다.
  • Can I modify attributes after indexing? 예 – 전체 인덱스를 재구성하지 않고 대량 변경을 적용하려면 AttributeChangeBatch를 사용하십시오.
  • How do I add attributes while indexing? 인덱싱 중에 속성을 추가하려면 FileIndexing 이벤트에 대한 핸들러를 등록하고 각 파일에 대해 프로그래밍 방식으로 속성을 설정하십시오.
  • Do I need a license? 평가를 위해 무료 체험을 사용할 수 있으며, 프로덕션 배포에는 영구 라이선스가 필요합니다.
  • Which Java version is required? Java 8 이상을 권장합니다.

“search by attribute java”란?

Search by attribute java는 텍스트 내용만이 아니라 사용자 정의 메타데이터(속성)를 기반으로 문서를 조회할 수 있게 해줍니다. 이 접근 방식은 결과 집합을 크게 축소하고 네트워크 트래픽을 감소시키며, 엔진이 전체 텍스트 스캔을 수행하기 전에 속성 필터를 평가하기 때문에 응답 시간이 빨라집니다.

동적 메타데이터 태깅을 사용하는 이유

동적 메타데이터 태깅을 사용하면 문서를 재인덱싱하지 않고도 사용자 정의 속성을 할당, 업데이트 및 관리할 수 있어, 변화하는 비즈니스 규칙에 맞게 유연하게 분류하고 검색 효율성을 향상시키며, 대규모 저장소에서 비용이 많이 드는 데이터 마이그레이션 필요성을 줄이면서도 규정 준수와 감사 가능성을 유지합니다.

  • Dynamic categorization – 메타데이터를 변화하는 비즈니스 규칙에 맞게 동기화합니다.
  • Faster filtering – 속성 필터가 전체 텍스트 검색 전에 평가되어 응답 시간이 향상됩니다.
  • Compliance tracking – 보존 정책이나 감사 요구사항을 위해 문서에 태그를 지정합니다.
  • Batch update attributes – 모든 문서를 재인덱싱하지 않고 한 번의 작업으로 다수의 문서를 변경합니다.

사전 요구 사항

  • Java 8+ (JDK 8 또는 최신 버전)
  • GroupDocs.Search for Java 라이브러리 (아래 Maven 설정 참고)
  • Java 컬렉션 및 예외 처리에 대한 기본적인 이해

GroupDocs.Search for Java 설정

Maven 설정

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

<repositories>
    <repository>
        <id>groupdocs-releases</id>
        <url>https://repo.groupdocs.com/maven</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-search</artifactId>
        <version>25.4</version>
    </dependency>
</dependencies>

직접 다운로드

또는 최신 버전을 GroupDocs.Search for Java releases에서 다운로드하십시오. Maven을 사용하지 않으려면 GroupDocs 웹사이트에서 JAR 파일을 받으세요.

라이선스 획득

  • 기능을 살펴보기 위해 무료 체험으로 시작하십시오.
  • 장기 사용을 위해서는 license page에서 임시 또는 정식 라이선스를 획득하십시오.

기본 초기화

// Initialize the search index folder
String indexFolder = "C:/search_index";
Index index = new Index(indexFolder);

// Apply license if you have one
License license = new License();
license.setLicense("C:/licenses/groupdocs.lic");

문서 속성 수정 방법 (일괄 업데이트)

인덱싱된 후에 문서 속성을 수정하려면 AttributeChangeBatch API를 사용하여 대량 업데이트를 적용할 수 있습니다. 이 방법은 선택된 파일의 메타데이터를 단일 트랜잭션으로 업데이트하여 전체 컬렉션을 재인덱싱하는 오버헤드를 피하고 전체 텍스트 인덱스를 그대로 유지합니다.

Direct answer: AttributeChangeBatch를 사용하여 메타데이터의 추가, 삭제 또는 교체를 단일 원자 작업으로 그룹화한 뒤 배치를 인덱스에 커밋하십시오. 이렇게 하면 기존 전체 텍스트 인덱스를 보존하면서 많은 문서의 속성을 한 번에 업데이트합니다.

단계 1: 인덱스에 문서 추가

index.add("C:/docs/contract1.pdf");
index.add("C:/docs/report2.docx");

단계 2: 인덱싱된 문서 정보 검색

DocumentInfo info = index.getDocumentInfo("contract1.pdf");
System.out.println("Current attributes: " + info.getAttributes());

단계 3: 문서 속성 일괄 업데이트

AttributeChangeBatch 클래스는 여러 속성 수정을 단일 원자 작업으로 그룹화하여 I/O 오버헤드를 줄이고 인덱스 일관성을 보장합니다.

AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addAttribute("contract1.pdf", "department", "Legal");
batch.removeAttribute("report2.docx", "confidential");
batch.replaceAttribute("report2.docx", "status", "archived", "active");
index.applyAttributeChanges(batch);

단계 4: 속성 필터로 검색

SearchOptions options = new SearchOptions();
options.addAttributeFilter("department", "Legal");
SearchResult result = index.search("agreement", options);
System.out.println("Found " + result.getCount() + " legal documents.");

인덱싱 중에 속성 추가 방법

인덱싱 과정에서 속성을 추가하면 모든 문서가 처음부터 필요한 메타데이터로 풍부해집니다. FileIndexing 이벤트를 처리하면 엔진이 파일을 처리하기 전에 각 DocumentInfo 객체에 키‑값 쌍을 프로그래밍 방식으로 연결할 수 있어 이후 검색에서 일관된 속성 사용이 보장됩니다.

Direct answer: 파일을 추가하기 전에 FileIndexing 이벤트에 구독하고, 이벤트 핸들러에서 DocumentInfo 객체의 addAttribute를 호출하여 키‑값 쌍을 연결한 뒤 인덱스가 파일 처리를 계속하도록 하십시오.

단계 1: FileIndexing 이벤트 구독

FileIndexing 이벤트는 파일이 인덱스에 추가될 때마다 트리거되어 사용자 정의 메타데이터를 주입할 수 있게 합니다.

index.getEvents().FileIndexing.add(event -> {
    // Example: set department based on folder name
    String folder = new File(event.getFilePath()).getParentFile().getName();
    event.getDocumentInfo().addAttribute("department", folder);
});

단계 2: 문서 인덱싱

index.add("C:/incoming/hr/policy.pdf");
index.add("C:/incoming/finance/budget.xlsx");

실용적인 적용 사례

  1. Document management systems – 파일을 수집할 때 자동으로 태그를 지정하여 즉시 파싯 탐색을 가능하게 합니다.
  2. Large content archives – 속성 필터와 전체 텍스트 검색을 결합하여 수 기가바이트 규모 컬렉션에서 쿼리 시간을 분에서 초로 단축합니다.
  3. Compliance & reporting – 규제 검사를 위해 조회 가능한 보존 기간, 기밀 수준 또는 감사 플래그를 동적으로 할당합니다.

성능 고려 사항

  • Memory management – JVM 힙을 모니터링하고 -Xmx를 조정하십시오(예: 2 GB 초과 인덱스의 경우 -Xmx4g).
  • Batch processing – 디스크 쓰기를 최소화하기 위해 AttributeChangeBatch로 속성 변경을 그룹화하고, 10 000건 이상의 수정은 배치를 나누어 트랜잭션 타임아웃을 방지하십시오.
  • Library updates – 최신 GroupDocs.Search 릴리스를 사용하십시오; 버전 25.4는 24.x에 비해 속성 필터 평가 속도를 30 % 향상시킵니다.

일반적인 문제 및 해결책

IssueWhy it happensHow to fix
속성이 적용되지 않음이벤트 핸들러가 인덱싱 전에 등록되지 않음index.getEvents().FileIndexing.add(...)가 모든 index.add(...) 호출 이전에 실행되도록 하십시오.
검색 결과가 없음속성 이름이 일치하지 않음(대소문자 구분)필터 생성 시 정확한 속성 이름을 사용하십시오(createAttribute("main")).
대규모 배치에서 메모리 부족 오류단일 배치에 변경이 너무 많음큰 업데이트를 더 작은 AttributeChangeBatch 인스턴스로 나누십시오(예: 배치당 5 000 문서).
라이선스 인식 안 됨라이선스 파일을 적용하지 않은 체험 JAR 사용인덱스 작업 전에 License license = new License(); license.setLicense("path/to/license.file");를 호출하십시오.

자주 묻는 질문

Q: Java에서 GroupDocs.Search를 사용하기 위한 사전 요구 사항은 무엇인가요?
A: Java 8+, GroupDocs.Search 라이브러리, 그리고 인덱싱 개념에 대한 기본 지식입니다.

Q: Maven을 통해 GroupDocs.Search를 설치하려면 어떻게 해야 하나요?
A: Maven 설정 섹션에 표시된 저장소와 의존성을 pom.xml에 추가하십시오.

Q: 문서가 인덱싱된 후에도 속성을 수정할 수 있나요?
A: 예, AttributeChangeBatch를 사용하여 재인덱싱 없이 문서 속성을 일괄 업데이트하십시오.

Q: 인덱싱 과정이 느리면 어떻게 해야 하나요?
A: JVM 메모리(-Xmx)를 최적화하고, 배치 업데이트를 사용하며, 성능 패치를 위해 최신 라이브러리 버전으로 업그레이드하십시오.

Q: Java용 GroupDocs.Search에 대한 추가 자료는 어디서 찾을 수 있나요?
A: 공식 문서를 방문하거나 커뮤니티 포럼을 살펴보십시오.

리소스


최종 업데이트: 2026-09-21
테스트 환경: GroupDocs.Search 25.4 for Java
작성자: GroupDocs

<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>
import com.groupdocs.search.Index;

// Initialize an index in a specified directory
Index index = new Index("YOUR_OUTPUT_DIRECTORY/ChangeAttributes");
index.add("YOUR_DOCUMENT_DIRECTORY");
import com.groupdocs.search.results.DocumentInfo;

DocumentInfo[] documents = index.getIndexedDocuments();
import com.groupdocs.search.common.AttributeChangeBatch;
import com.groupdocs.search.SearchOptions;

AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addToAll("public"); // Add 'public' to all documents
batch.remove(documents[0].getFilePath(), "public"); // Remove 'public' from a specific document
batch.add(documents[0].getFilePath(), "main", "key"); // Add 'main' and 'key' attributes

// Apply changes
index.changeAttributes(batch);
import com.groupdocs.search.results.SearchResult;

SearchOptions options = new SearchOptions();
options.setSearchDocumentFilter(SearchDocumentFilter.createAttribute("main"));
String query = "length";
SearchResult result = index.search(query, options); // Perform the search
import com.groupdocs.search.events.EventHandler;
import com.groupdocs.search.events.FileIndexingEventArgs;

index.getEvents().FileIndexing.add(new EventHandler<FileIndexingEventArgs>() {
    @Override
    public void invoke(Object sender, FileIndexingEventArgs args) {
        if (args.getDocumentFullPath().endsWith("SampleDocument.pdf")) {
            args.setAttributes(new String[] { "main", "key" });
        }
    }
});
index.add("YOUR_DOCUMENT_DIRECTORY");

관련 튜토리얼