如何在 Java 中配置 GroupDocs.Search 网络 – 提升搜索

在现代数据密集型应用中,正确 how to configure GroupDocs 是实现跨大型文档库提供闪电般快速、相关搜索结果的基石。无论您是构建企业门户、知识库还是产品目录,经过精心调优的 GroupDocs.Search 网络都能实现水平扩展、注入同义词逻辑,并保持延迟在可控范围内。在本教程中,我们将逐步演示使用 Java 设置、部署和微调 GroupDocs.Search 网络的所有步骤,并提供添加同义词到索引以及处理节点生命周期的实用建议。

快速答案

  • 配置 GroupDocs.Search 网络的主要好处是什么? 它实现了分布式索引和查询,提升了性能和可扩展性。
  • 运行示例是否需要许可证? 免费试用可用于开发;生产环境需要商业许可证。
  • 可以在不重建索引的情况下添加同义词吗? 是的——在运行时使用同义词字典来 add synonyms to index。
  • 我可以部署多少节点? 您可以根据基础设施的容量部署任意数量的节点;每个节点在独立的端口上运行。
  • 需要哪个 Java 版本? 支持 JDK 8 或更高版本,完全兼容至 JDK 21。

什么是配置 GroupDocs.Search 网络?

GroupDocs.Search 网络 是一组协同工作以对共享文档集进行索引和查询的 JVM 进程。它由一个负责调度一个或多个工作节点(分片)的主节点组成。网络抽象了底层存储,单个查询会自动广播到每个分片,结果在返回给调用者之前被合并。

为什么要配置 GroupDocs.Search 网络?

配置 GroupDocs.Search 网络可为您带来三大具体优势:scalability(可扩展性)、reliability(可靠性)和enhanced relevance(相关性提升)。通过将索引负载分散到最多 20 个节点,每个节点处理 5 GB 的分片,相比单节点设置可将总索引时间降低约 70 %。添加同义词字典可使使用替代术语的查询召回率提升至 35 %,而节点冗余则在维护窗口期间保证 99.9 % 的正常运行时间。

前置条件

  • Java Development Kit (JDK) 8 – 21(任何 LTS 版本)
  • Maven 3.5 + 用于构建项目
  • 熟悉基本的 Java 语法和 Maven 依赖管理
  • 获取 GroupDocs.Search for Java 库(可通过 Maven Central 或官方发布页面获取)

为 Java 设置 GroupDocs.Search

将仓库和依赖添加到您的 Maven pom.xml:

以下 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 下载最新版本。

许可证获取

  • Free Trial – 免费试用核心功能。
  • Temporary License – 为短期测试解锁全部功能。
  • Commercial License – 生产部署及获取高级支持所必需的商业许可证。

基本初始化和设置

创建一个简单的 Java 类以验证库是否正确加载:

SampleInitializer 类演示了加载 GroupDocs.Search 引擎。

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. 配置搜索网络

定义基础文档文件夹以及节点通信的起始端口。

SearchNetworkConfig 保存网络节点的配置信息。

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. 部署搜索网络节点

启动多个共享相同配置的工作节点。

SearchNode 代表分布式网络中的单个节点。

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. 订阅节点事件

通过向主节点附加事件监听器来监控健康状态、索引进度和错误情况。

NetworkEventListener 处理节点生命周期事件的回调。

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 来提升相关性。

SynonymDictionary 允许向索引器添加同义词组。

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. 添加索引目录

告知主节点哪些文件夹包含您希望可搜索的文档。

Indexer.addDirectory 注册一个用于索引的文件夹。

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

该方法递归扫描目录并将文件分配到各分片,支持超过 10 TB 的数据而无需将整个文件加载到内存中。

6. 在网络中执行文本搜索

在所有节点上执行查询,可选地强制精确匹配行为。

SearchEngine.search 在网络上运行查询。

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

当需要严格的词项匹配且不进行词干提取时,将 exactMatchOnly 切换为 true,这可在代码搜索场景中将精确度提升至 20 %。

7. 关闭网络节点

处理完成后优雅地释放资源。

node.close() 关闭 SearchNode 并释放资源。

import com.groupdocs.search.scaling.*;

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

正确的关闭可防止内存泄漏并保持 JVM 健康,尤其是在离峰时段回收节点的长期运行服务中。

实际应用

场景网络如何提供帮助
Enterprise Search将索引分布到数据中心服务器,以处理 PB 级语料库,实现对 1 亿+ 文档的亚秒级查询延迟。
Document Management添加同义词到索引,使用户即使使用不同术语也能找到文档,召回率提升至 35 %。
E‑commerce Catalog部署区域特定节点以快速提供本地化产品搜索,将平均响应时间从 250 ms 降至 80 ms。
Content Management在编辑者向特定目录添加新文件时保持内容可搜索;网络增量重新索引,无需停机。

常见问题与解决方案

  • Port Conflicts – 确保每个节点的端口(basePort + index)未被占用;如有必要调整 basePort。
  • Synonym Not Applied – 确认在添加词条后调用了 indexer.setDictionary(dictionary);否则新同义词在搜索时不会生效。
  • Node Not Responding – 订阅事件;查找 NodeFailed 回调以诊断网络问题。
  • Memory Leak on Close – 对每个已部署的节点始终调用 node.close();考虑使用 try‑with‑resources 块实现自动清理。

常见问答

Q: 部署多个节点如何提升搜索性能?
A: 每个节点对数据的一个分片进行索引,实现并行处理,并随着工作负载在集群中分摊而降低查询延迟。

Q: 能否在不重新索引现有文档的情况下添加同义词?
A: 可以,您可以在运行时通过同义词字典 add synonyms to index;更改会立即对新查询生效。

Q: 订阅节点事件是强制性要求吗?
A: 虽然基本操作不需要,但事件订阅可让您了解节点健康状态,并帮助您及时对故障作出响应。

Q: 管理节点资源的最佳实践是什么?
A: 定期关闭空闲节点,监控 JVM 内存使用,并在离峰时段回收节点,以保持资源消耗最佳。

Q: GroupDocs.Search 是否支持 PDF 或图像等非文本格式?
A: 当然。该库能够从 PDF、Office 文件中提取文本,并对图像执行 OCR,使其开箱即用地可搜索。


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

相关教程