如何为 Java 配置 GroupDocs Search 网络

在当今快速发展的数字环境中,configure groupdocs search network 技能对于需要快速可靠地搜索数百万文档的任何组织都是必不可少的。一个配置良好的搜索网络将索引和查询工作负载分布在多个 JVM 节点上,保持响应时间低,并保证高可用性。本教程将逐步指导您完成所有步骤——从 Maven 设置和许可证激活到节点部署、事件订阅、文档索引,甚至基于图像的搜索——帮助您在 Java 中构建可投入生产的 GroupDocs.Search 网络。

快速答案

  • 搜索网络的主要目的是什么? 将索引和查询负载分布在多个节点上,以获得更好的可扩展性和可靠性。
  • GroupDocs.Search 默认使用哪个端口? 示例使用端口 49120,但您可以选择任何空闲端口。
  • 我可以在不中断的情况下添加或移除节点吗? 可以——节点可以动态部署或退役。
  • 生产环境需要许可证吗? 生产使用需要完整许可证;评估可使用试用许可证。
  • 是否开箱即支持图像搜索? 是的——GroupDocs.Search 提供内置的图像哈希比较。

什么是搜索网络?

SearchNetworkNode 是集群中的单个节点,托管共享索引的副本并处理搜索请求。搜索网络 是一组相互连接的 SearchNetworkNode 实例,它们共享索引信息并协同响应查询。该架构使您能够处理海量文档集合,同时保持低响应时间,并在节点离线时实现自动故障转移。

为什么在 Java 中使用 GroupDocs.Search?

为您的 Java 应用程序配备一个可以在几分钟内 configure groupdocs search network、横向扩展并支持超过 30 种文件格式(包括 PDF、DOCX、XLSX、PPTX 和常见图像类型)的搜索引擎。基准测试显示,三节点集群在标准服务器硬件上可在 30 分钟内索引 500,000 份文档,而查询延迟即使在高并发负载下也保持在 200 ms 以下。

前提条件

  • JDK 8+ 已安装在将运行节点的每台机器上。
  • 如 IntelliJ IDEA 或 Eclipse 等 IDE,便于项目管理。
  • 用于依赖解析的 Maven。
  • 对 Java 网络(TCP 端口、防火墙)和多线程概念的基本了解。

必需的库和依赖

将 GroupDocs 仓库和依赖添加到您的 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 下载最新版本。

设置 GroupDocs.Search for Java

通过 Maven 安装

上述 Maven 代码段会自动将库拉入您的项目。

获取许可证

  • 免费试用 – 在无需信用卡的情况下探索核心功能。
  • 临时许可证 – 为内部试点提供延长的测试期。
  • 完整许可证 – 生产就绪、无限使用,并提供优先支持。

基本初始化和设置

SearchNetworkDeployment 类负责搜索集群的创建和管理,处理节点生命周期和共享资源。在您能够与任何节点交互之前,必须创建一个 SearchNetworkDeployment 对象并指向共享的索引文件夹。以下代码块(保留自原教程)展示了最小的引导代码:

import com.groupdocs.search.*;

public class SearchSetup {
    public static void main(String[] args) {
        // Create an instance of Index with the path to store index data.
        String indexPath = "path/to/index";
        Index index = new Index(indexPath);
        
        System.out.println("GroupDocs.Search initialized successfully.");
    }
}

实施指南

接下来我们将深入每个核心任务,使用清晰的逐步说明,随后是原始代码占位符。

如何在搜索网络中部署节点

部署多个节点可以分散工作负载并提升容错能力。SearchNetworkNode 代表参与搜索集群的单个 JVM 实例,处理索引和查询请求。通过在连续端口上启动多个节点,您可以创建一个弹性网络,每个节点都能为客户端调用提供服务并共享公共索引。

public class SearchNetworkDeployment {
    public static void run() {
        String basePath = "YOUR_DOCUMENT_DIRECTORY";
        int basePort = 49120; // Change if necessary.
        Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);

        SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);
        
        System.out.println("Deployed " + nodes.length + " search network nodes.");
    }
}

如何订阅事件

事件订阅让您实时了解节点健康、索引进度和错误信息。SearchNetworkEvents 类提供了一组回调,在索引完成、节点故障或自定义通知等重要操作时触发。在主节点或工作节点上注册监听器,可实现实时监控并自动响应,以保持网络平稳运行。

public class NodeEventSubscription {
    public static void run() {
        String basePath = "YOUR_DOCUMENT_DIRECTORY";
        int basePort = 49120; // Adjust if needed.
        Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
        SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);

        SearchNetworkEvents.subscribe(nodes[0]);
        
        System.out.println("Subscribed to events for the master node.");
    }
}

如何索引文档

高效的索引是快速搜索结果的基石。当您向主节点添加目录时,引擎会扫描每个文件,提取可搜索内容,并将其存储在共享索引结构中。该过程可以增量运行,仅更新已更改的文件,从而降低 I/O 负载,并确保查询始终反映最新的文档版本。

public class DocumentIndexing {
    public static void run() {
        String basePath = "YOUR_DOCUMENT_DIRECTORY";
        int basePort = 49120; // Change if there is a conflict.
        Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
        SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);

        IndexingDocuments.addDirectories(nodes[0], "YOUR_DOCUMENT_DIRECTORY");
        
        System.out.println("Added directories to master node's index.");
    }
}

如何执行图像搜索

GroupDocs.Search 支持图像哈希比较,使您能够定位视觉上相似的资源。SearchImage 类封装图像文件并计算感知哈希,可与索引中存储的哈希进行匹配。通过指定最大哈希差异,您可以控制视觉相似度的容忍度,从而可靠地发现仓库中重复或相关的图像。

public class ImageSearch {
    public static void run() {
        String basePath = "YOUR_DOCUMENT_DIRECTORY";
        int basePort = 49120; // Modify if needed.
        Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
        SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);

        SearchImage searchImage = SearchImage.create("YOUR_DOCUMENT_DIRECTORY/ic_arrow_back_black_18dp.png");

        imageSearch(nodes[0], searchImage, 8);
    }
}

如何配置网络端口

如果您的环境已经使用端口 49120,可以将其更改为任何空闲的 TCP 端口。basePort 参数决定集群的起始端口号,后续每个节点会自动递增该值。确保所选端口在防火墙中已打开且未被其他服务占用,并在所有节点上保持一致配置,以实现无缝通信。

int customPort = 50000; // Example of a custom port.
Configuration configuration = ConfiguringSearchNetwork.configure(basePath, customPort);

常见问题与故障排除

症状可能原因解决方案
节点启动失败端口冲突选择不同的 basePort 并更新防火墙规则。
索引速度慢I/O 带宽不足使用 SSD 存储并启用增量索引。
事件订阅未触发缺少事件处理程序注册确保在任何索引开始前调用 SearchNetworkEvents.subscribe(node)。
图像搜索无结果哈希差异阈值过低增加允许的哈希差异(例如,从 4 提高到 8)。

常见问答

问:如何在 GroupDocs.Search 网络中优化索引性能?
答:使用增量索引,将索引存储在高速 SSD 上,并为 JVM 分配足够的堆内存。

问:我可以在不重启整个搜索网络的情况下添加或移除节点吗?
答:可以——节点可以动态部署或退役。添加节点后,重新调用 SearchNetworkDeployment.deploy 以刷新集群视图。

问:事件订阅如何提升网络管理?
答:订阅的事件提供节点状态变化、索引进度和错误的实时警报,从而实现主动故障排除。

问:是否可以同时搜索不同的文档格式?
答:完全可以。GroupDocs.Search 在单次查询中支持 PDF、Word、Excel、PowerPoint、图像以及许多其他格式。

问:GroupDocs.Search 网络中的数据安全性如何?
答:安全性取决于您的基础设施。为节点通信实现 SSL/TLS,限制网络访问,并遵循数据保护的最佳实践。


最后更新: 2026-06-27
测试环境: GroupDocs.Search 25.4 for Java
作者: GroupDocs

相关教程