How to Implement a Search Network with GroupDocs.Search in .NET

Introduction

Enhance your document management system with powerful search capabilities by configuring and managing a network of nodes that can efficiently index and search large volumes of documents. This tutorial guides you through setting up a robust search network using GroupDocs.Search and GroupDocs.Redaction for .NET.

What You’ll Learn:

  • Configuring a search network
  • Deploying nodes within the network
  • Subscribing to node events
  • Adding directories for document indexing
  • Searching text across the network
  • Highlighting search results in documents

Prerequisites

Before you start, ensure you have:

  • Required Libraries: Install GroupDocs.Search and GroupDocs.Redaction for .NET.
  • Environment Setup:
    • Development environment (Visual Studio)
    • .NET Framework or .NET Core
  • Knowledge Prerequisites:
    • Basic understanding of C# programming
    • Familiarity with network configurations

Setting Up GroupDocs.Redaction for .NET

To begin, install the necessary packages:

.NET CLI

dotnet add package GroupDocs.Redaction

Package Manager

Install-Package GroupDocs.Redaction

Alternatively, use the NuGet Package Manager UI and search for “GroupDocs.Redaction” to install it.

License Acquisition

  • Free Trial: Start with a free trial license to test the features.
  • Temporary License: Obtain a temporary license if you need more time.
  • Purchase: For long-term usage, consider purchasing a full license.

Basic Initialization and Setup

To initialize GroupDocs.Redaction in your project:

using GroupDocs.Redaction;

// Initialize Redactor with a file path
Redactor redactor = new Redactor("sample.pdf");

Implementation Guide

Let’s break down the implementation into key features of the search network.

Configuring Search Network

Overview: Set up your search network by defining paths and ports for node communication.

using GroupDocs.Search.Common;
using GroupDocs.Search.Scaling.Configuring;

namespace GroupDocsSearchExamples
{
    public class ConfigureSearchNetwork
    {
        public static Configuration Run(string basePath, int basePort)
        {
            // Configures the search network with a given path and port.
            return ConfiguringSearchNetwork.Configure(basePath, basePort);
        }
    }
}
  • Parameters:
    • basePath: Directory for node data storage
    • basePort: Port number for inter-node communication

Deploying Search Network Nodes

Overview: Expand your search network by deploying nodes.

using GroupDocs.Search.Scaling;

namespace GroupDocsSearchExamples
{
    public class DeploySearchNetworkNodes
    {
        public static SearchNetworkNode[] Run(string basePath, int basePort, Configuration configuration)
        {
            // Deploys the search network nodes using the provided configuration.
            return SearchNetworkDeployment.Deploy(basePath, basePort, configuration);
        }
    }
}
  • Key Steps:
    • Use Configuration from previous setup
    • Deploy nodes to specified paths and ports

Subscribing to Network Node Events

Overview: Monitor master node events for real-time updates.

using GroupDocs.Search.Scaling;

namespace GroupDocsSearchExamples
{
    public class SubscribeToNetworkNodeEvents
    {
        public static void Run(SearchNetworkNode masterNode)
        {
            // Subscribes to events on the master node.
            SearchNetworkNodeEvents.Subscribe(masterNode);
        }
    }
}
  • Purpose: Handle network changes or errors efficiently.

Adding Directories for Indexing

Overview: Include directories in your search network for document indexing.

using GroupDocs.Search.Scaling;

namespace GroupDocsSearchExamples
{
    public class AddDirectoriesForIndexing
    {
        public static void Run(SearchNetworkNode masterNode, string documentsPath)
        {
            // Adds the specified directories to the master node for document indexing.
            IndexingDocuments.AddDirectories(masterNode, documentsPath);
        }
    }
}
  • Parameters:
    • documentsPath: Path of the directory containing documents

Searching Text in Network

Overview: Execute text searches across all nodes.

using GroupDocs.Search.Scaling;
using System.Collections.Generic;

namespace GroupDocsSearchExamples
{
    public class SearchTextInNetwork
    {
        public static List<NetworkFoundDocument> Run(SearchNetworkNode masterNode, string query)
        {
            // Searches for the specified text across all nodes in the network.
            return TextSearchInNetwork.SearchAll(masterNode, query, false);
        }
    }
}
  • Key Consideration: Ensure efficient query distribution among nodes.

Highlighting Search Results in Documents

Overview: Visually highlight search results within documents.

using GroupDocs.Search.Highlighters;
using GroupDocs.Search.Options;
using GroupDocs.Search.Scaling.Results;

namespace GroupDocsSearchExamples
{
    public class HighlightResultsInDocument
    {
        public static void Run(SearchNetworkNode node, NetworkFoundDocument document, int maxFragments)
        {
            // Highlights the search results in the specified document.
            Searcher searcher = node.Searcher;
            FragmentHighlighter highlighter = new FragmentHighlighter(OutputFormat.PlainText);

            HighlightOptions options = new HighlightOptions
            {
                TermsAfter = 5,
                TermsBefore = 5,
                TermsTotal = 15
            };

            searcher.Highlight(document, highlighter, options);
            FragmentContainer[] result = highlighter.GetResult();
            for (int i = 0; i < result.Length; i++)
            {
                FragmentContainer container = result[i];
                if (container.Count == 0) continue;

                string[] fragments = container.GetFragments();
                int count = Math.Min(fragments.Length, maxFragments);
                for (int j = 0; j < count; j++)
                {
                    // Output each fragment up to the specified maximum.
                }
            }
        }
    }
}
  • Key Configuration: Adjust HighlightOptions based on your needs.

Practical Applications

  1. Enterprise Document Management: Enhance search capabilities in large organizations with vast document repositories.
  2. Legal Firms: Quickly locate case-related documents across multiple nodes.
  3. Academic Libraries: Streamline research by indexing and searching academic papers efficiently.
  4. Healthcare Systems: Improve patient data retrieval through distributed network searches.
  5. Government Archives: Manage public records with scalable search solutions.

Performance Considerations

  • Optimization Tips:
    • Regularly update node configurations for load balancing
    • Monitor resource usage to prevent bottlenecks
  • Resource Usage Guidelines:
    • Allocate sufficient memory and CPU resources per node
    • Use efficient indexing strategies to minimize latency
  • Best Practices:
    • Implement caching mechanisms where possible
    • Conduct periodic performance audits

Conclusion

In this tutorial, you’ve learned how to leverage GroupDocs.Search and Redaction for .NET to build a powerful search network. By following the steps outlined, you can configure, deploy, and manage nodes effectively while ensuring optimal performance.

Next Steps: Experiment with different configurations to tailor the search network to your specific needs.