GroupDocs.Search for Java 24.2 Release Notes

Major Features

There are the following features, enhancements, and fixes in this release:

  • Implement scaling of search index
  • Implement a search option to get attributes in search results

Full List of Issues Covering all Changes in this Release

KeySummaryCategory
SEARCHNET-2088Implement scaling of search indexFeature
SEARCHNET-2910Implement a search option to get attributes in search resultsEnhancement
SEARCHNET-2957Remove indexing options from index settingsBreaking change
SEARCHNET-2956Remove obsolete text highlightersBreaking change
SEARCHJAVA-321Remove static create method from AttributeChangeBatch classBreaking change

Public API and Backward Incompatible Changes

Implement scaling of search index

This feature implements the ability to scale the search index to increase indexing performance and search performance.

Public API changes

Class ChangeAttributesOptions has been added to com.groupdocs.search.options package.
Constructor ChangeAttributesOptions() has been added to com.groupdocs.search.options.ChangeAttributesOptions class.
Method boolean isAsync() has been added to com.groupdocs.search.options.ChangeAttributesOptions class.
Method void setAsync(boolean) has been added to com.groupdocs.search.options.ChangeAttributesOptions class.

Class Configuration has been added to com.groupdocs.search.scaling.configuring package.
Method com.groupdocs.search.scaling.configuring.Configuration load(String) has been added to com.groupdocs.search.scaling.configuring.Configuration class.
Method com.groupdocs.search.scaling.configuring.Configuration load(InputStream) has been added to com.groupdocs.search.scaling.configuring.Configuration class.
Method void save(String) has been added to com.groupdocs.search.scaling.configuring.Configuration class.
Method void save(OutputStream) has been added to com.groupdocs.search.scaling.configuring.Configuration class.

Class Configurator has been added to com.groupdocs.search.scaling.configuring package.
Method com.groupdocs.search.scaling.configuring.NodeConfigurator addNode(int) has been added to com.groupdocs.search.scaling.configuring.Configurator class.
Method com.groupdocs.search.scaling.configuring.Configuration completeConfiguration() has been added to com.groupdocs.search.scaling.configuring.Configurator class.
Constructor Configurator() has been added to com.groupdocs.search.scaling.configuring.Configurator class.
Method com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator setIndexSettings() has been added to com.groupdocs.search.scaling.configuring.Configurator class.

Class DataExtractedEventArgs has been added to com.groupdocs.search.scaling.events package.
Method String getDocumentKey() has been added to com.groupdocs.search.scaling.events.DataExtractedEventArgs class.
Method int getExtractorIndex() has been added to com.groupdocs.search.scaling.events.DataExtractedEventArgs class.

Class DeleteOptions has been added to com.groupdocs.search.options package.
Constructor DeleteOptions() has been added to com.groupdocs.search.options.DeleteOptions class.
Method boolean isAsync() has been added to com.groupdocs.search.options.DeleteOptions class.
Method void setAsync(boolean) has been added to com.groupdocs.search.options.DeleteOptions class.

Enum DictionaryType has been added to com.groupdocs.search.dictionaries package.
Field com.groupdocs.search.dictionaries.DictionaryType AliasDictionary has been added to com.groupdocs.search.dictionaries.DictionaryType enum.
Field com.groupdocs.search.dictionaries.DictionaryType Alphabet has been added to com.groupdocs.search.dictionaries.DictionaryType enum.
Field com.groupdocs.search.dictionaries.DictionaryType CharacterReplacementDictionary has been added to com.groupdocs.search.dictionaries.DictionaryType enum.
Field com.groupdocs.search.dictionaries.DictionaryType HomophoneDictionary has been added to com.groupdocs.search.dictionaries.DictionaryType enum.
Field com.groupdocs.search.dictionaries.DictionaryType PasswordDictionary has been added to com.groupdocs.search.dictionaries.DictionaryType enum.
Field com.groupdocs.search.dictionaries.DictionaryType SpellingCorrector has been added to com.groupdocs.search.dictionaries.DictionaryType enum.
Field com.groupdocs.search.dictionaries.DictionaryType StopWordDictionary has been added to com.groupdocs.search.dictionaries.DictionaryType enum.
Field com.groupdocs.search.dictionaries.DictionaryType SynonymDictionary has been added to com.groupdocs.search.dictionaries.DictionaryType enum.

Class DocumentDeletedEventArgs has been added to com.groupdocs.search.scaling.events package.
Method String getDocumentKey() has been added to com.groupdocs.search.scaling.events.DocumentDeletedEventArgs class.
Method int getShardIndex() has been added to com.groupdocs.search.scaling.events.DocumentDeletedEventArgs class.

Class DocumentIndexedEventArgs has been added to com.groupdocs.search.scaling.events package.
Method String getDocumentKey() has been added to com.groupdocs.search.scaling.events.DocumentIndexedEventArgs class.
Method int getShardIndex() has been added to com.groupdocs.search.scaling.events.DocumentIndexedEventArgs class.

Class ErrorOccurredEventArgs has been added to com.groupdocs.search.scaling.events package.
Method String getMessage() has been added to com.groupdocs.search.scaling.events.ErrorOccurredEventArgs class.
Method int getNodeIndex() has been added to com.groupdocs.search.scaling.events.ErrorOccurredEventArgs class.
Method int getServiceIndex() has been added to com.groupdocs.search.scaling.events.ErrorOccurredEventArgs class.

Class Indexer has been added to com.groupdocs.search.scaling package.
Method void add(com.groupdocs.search.common.Document[], String[], com.groupdocs.search.options.IndexingOptions) has been added to com.groupdocs.search.scaling.Indexer class.
Method void add(com.groupdocs.search.common.ExtractedData[], com.groupdocs.search.options.IndexingOptions) has been added to com.groupdocs.search.scaling.Indexer class.
Method void changeAttributes(com.groupdocs.search.common.AttributeChangeBatch, com.groupdocs.search.options.ChangeAttributesOptions) has been added to com.groupdocs.search.scaling.Indexer class.
Method void delete(String[], com.groupdocs.search.options.DeleteOptions) has been added to com.groupdocs.search.scaling.Indexer class.
Method void deleteAllData() has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.AliasDictionary getAliasDictionary(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.Alphabet getAlphabet(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method String[] getAttributes(String) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.CharacterReplacementDictionary getCharacterReplacementDictionary(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.DictionaryBase getDictionary(com.groupdocs.search.dictionaries.DictionaryType, int) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.HomophoneDictionary getHomophoneDictionary(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.PasswordDictionary getPasswordDictionary(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.SpellingCorrector getSpellingCorrector(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.StopWordDictionary getStopWordDictionary(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method com.groupdocs.search.dictionaries.SynonymDictionary getSynonymDictionary(int) has been added to com.groupdocs.search.scaling.Indexer class.
Method void optimize(com.groupdocs.search.options.OptimizeOptions) has been added to com.groupdocs.search.scaling.Indexer class.
Method void setDictionary(com.groupdocs.search.dictionaries.DictionaryBase, int) has been added to com.groupdocs.search.scaling.Indexer class.
Method void setDictionary(com.groupdocs.search.dictionaries.DictionaryBase) has been added to com.groupdocs.search.scaling.Indexer class.
Method void synchronize(com.groupdocs.search.options.SynchronizeOptions) has been added to com.groupdocs.search.scaling.Indexer class.

Class IndexSettingsConfigurator has been added to com.groupdocs.search.scaling.configuring package.
Method com.groupdocs.search.scaling.configuring.Configurator completeIndexSettings() has been added to com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator class.
Method com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator setIndexType(com.groupdocs.search.options.IndexType) has been added to com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator class.
Method com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator setSearchThreads(com.groupdocs.search.options.NumberOfThreads) has been added to com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator class.
Method com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator setTextStorageSettings(boolean, com.groupdocs.search.options.Compression) has been added to com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator class.
Method com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator setUseCharacterReplacements(boolean) has been added to com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator class.
Method com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator setUseStopWords(boolean) has been added to com.groupdocs.search.scaling.configuring.IndexSettingsConfigurator class.

Interface INetworkSettings has been added to com.groupdocs.search.scaling.configuring package.

Class NetworkDocumentInfo has been added to com.groupdocs.search.scaling.results package.
Method com.groupdocs.search.results.DocumentInfo getDocumentInfo() has been added to com.groupdocs.search.scaling.results.NetworkDocumentInfo class.
Method int getShardIndex() has been added to com.groupdocs.search.scaling.results.NetworkDocumentInfo class.

Class NetworkFoundDocument has been added to com.groupdocs.search.scaling.results package.
Method com.groupdocs.search.results.FoundDocument getFoundDocument() has been added to com.groupdocs.search.scaling.results.NetworkFoundDocument class.
Method int getShardIndex() has been added to com.groupdocs.search.scaling.results.NetworkFoundDocument class.

Class NetworkImageSearchResult has been added to com.groupdocs.search.scaling.results package.
Method com.groupdocs.search.results.FoundImageFrame getFoundImage(int) has been added to com.groupdocs.search.scaling.results.NetworkImageSearchResult class.
Method int getImageCount() has been added to com.groupdocs.search.scaling.results.NetworkImageSearchResult class.
Method com.groupdocs.search.scaling.results.NetworkImageSearchToken getNetworkImageSearchToken() has been added to com.groupdocs.search.scaling.results.NetworkImageSearchResult class.
Method int getNodeIndex() has been added to com.groupdocs.search.scaling.results.NetworkImageSearchResult class.
Method int getShardIndex() has been added to com.groupdocs.search.scaling.results.NetworkImageSearchResult class.

Class NetworkImageSearchToken has been added to com.groupdocs.search.scaling.results package.

Class NetworkIndexingProgressEventArgs has been added to com.groupdocs.search.scaling.events package.
Method int getNodeIndex() has been added to com.groupdocs.search.scaling.events.NetworkIndexingProgressEventArgs class.
Method int getProcessedDocuments() has been added to com.groupdocs.search.scaling.events.NetworkIndexingProgressEventArgs class.
Method double getProgressPercentage() has been added to com.groupdocs.search.scaling.events.NetworkIndexingProgressEventArgs class.
Method int getServiceIndex() has been added to com.groupdocs.search.scaling.events.NetworkIndexingProgressEventArgs class.
Method int getTotalDocuments() has been added to com.groupdocs.search.scaling.events.NetworkIndexingProgressEventArgs class.

Class NetworkOptimizationProgressEventArgs has been added to com.groupdocs.search.scaling.events package.
Method int getNodeIndex() has been added to com.groupdocs.search.scaling.events.NetworkOptimizationProgressEventArgs class.
Method int getProcessedSegments() has been added to com.groupdocs.search.scaling.events.NetworkOptimizationProgressEventArgs class.
Method double getProgressPercentage() has been added to com.groupdocs.search.scaling.events.NetworkOptimizationProgressEventArgs class.
Method int getServiceIndex() has been added to com.groupdocs.search.scaling.events.NetworkOptimizationProgressEventArgs class.
Method int getTotalSegments() has been added to com.groupdocs.search.scaling.events.NetworkOptimizationProgressEventArgs class.

Class NetworkSearchResult has been added to com.groupdocs.search.scaling.results package.
Method int getDocumentCount() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method java.util.Date getEndTime() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method Iterator iterator() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method com.groupdocs.search.scaling.results.NetworkFoundDocument getFoundDocument(int) has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method com.groupdocs.search.scaling.results.NetworkSearchToken getNextChunkSearchToken() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method int getNodeIndex() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method int getOccurrenceCount() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method double getSearchDuration() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method java.util.Date getStartTime() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method boolean getTruncated() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.
Method String getWarnings() has been added to com.groupdocs.search.scaling.results.NetworkSearchResult class.

Class NetworkSearchToken has been added to com.groupdocs.search.scaling.results package.

Class NodeConfigurator has been added to com.groupdocs.search.scaling.configuring package.
Method com.groupdocs.search.scaling.configuring.NodeConfigurator addExtractor(String) has been added to com.groupdocs.search.scaling.configuring.NodeConfigurator class.
Method com.groupdocs.search.scaling.configuring.NodeConfigurator addIndexer(String) has been added to com.groupdocs.search.scaling.configuring.NodeConfigurator class.
Method com.groupdocs.search.scaling.configuring.NodeConfigurator addLogSink() has been added to com.groupdocs.search.scaling.configuring.NodeConfigurator class.
Method com.groupdocs.search.scaling.configuring.NodeConfigurator addSearcher(String) has been added to com.groupdocs.search.scaling.configuring.NodeConfigurator class.
Method com.groupdocs.search.scaling.configuring.NodeConfigurator addShard(String) has been added to com.groupdocs.search.scaling.configuring.NodeConfigurator class.
Method com.groupdocs.search.scaling.configuring.Configurator completeNode() has been added to com.groupdocs.search.scaling.configuring.NodeConfigurator class.
Method com.groupdocs.search.scaling.configuring.NodeConfigurator setTcpEndpoint(String, int) has been added to com.groupdocs.search.scaling.configuring.NodeConfigurator class.

Class NodeEventHub has been added to com.groupdocs.search.scaling.events package.
Event Event AttributeChangesCompleted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event ConfigurationCompleted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event<EventHandler> DataExtracted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event DeletionCompleted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event<EventHandler> DocumentDeleted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event<EventHandler> DocumentIndexed has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event<EventHandler> ErrorOccurred has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event IndexingCompleted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event<EventHandler> IndexingProgressChanged has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event OptimizationCompleted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event<EventHandler> OptimizationProgressChanged has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event<EventHandler> StatusChanged has been added to com.groupdocs.search.scaling.events.NodeEventHub class.
Event Event SynchronizationCompleted has been added to com.groupdocs.search.scaling.events.NodeEventHub class.

Class OptimizeOptions has been added to com.groupdocs.search.options package.
Constructor OptimizeOptions() has been added to com.groupdocs.search.options.OptimizeOptions class.
Method boolean isAsync() has been added to com.groupdocs.search.options.OptimizeOptions class.
Method void setAsync(boolean) has been added to com.groupdocs.search.options.OptimizeOptions class.

Class Searcher has been added to com.groupdocs.search.scaling package.
Method void getDocumentText(com.groupdocs.search.scaling.results.NetworkDocumentInfo, com.groupdocs.search.common.OutputAdapter) has been added to com.groupdocs.search.scaling.Searcher class.
Method com.groupdocs.search.scaling.results.NetworkDocumentInfo[] getIndexedDocumentItems(com.groupdocs.search.scaling.results.NetworkDocumentInfo) has been added to com.groupdocs.search.scaling.Searcher class.
Method com.groupdocs.search.scaling.results.NetworkDocumentInfo[] getIndexedDocuments(int) has been added to com.groupdocs.search.scaling.Searcher class.
Method void highlight(com.groupdocs.search.scaling.results.NetworkFoundDocument, com.groupdocs.search.highlighters.Highlighter, com.groupdocs.search.options.HighlightOptions) has been added to com.groupdocs.search.scaling.Searcher class.
Method com.groupdocs.search.scaling.results.NetworkSearchResult searchFirst(com.groupdocs.search.SearchQuery, com.groupdocs.search.options.SearchOptions) has been added to com.groupdocs.search.scaling.Searcher class.
Method com.groupdocs.search.scaling.results.NetworkImageSearchResult searchFirst(com.groupdocs.search.common.SearchImage, com.groupdocs.search.options.ImageSearchOptions) has been added to com.groupdocs.search.scaling.Searcher class.
Method com.groupdocs.search.scaling.results.NetworkSearchResult searchFirst(String, com.groupdocs.search.options.SearchOptions) has been added to com.groupdocs.search.scaling.Searcher class.
Method com.groupdocs.search.scaling.results.NetworkSearchResult searchNext(com.groupdocs.search.scaling.results.NetworkSearchToken) has been added to com.groupdocs.search.scaling.Searcher class.
Method com.groupdocs.search.scaling.results.NetworkImageSearchResult searchNext(com.groupdocs.search.scaling.results.NetworkImageSearchToken) has been added to com.groupdocs.search.scaling.Searcher class.

Class SearchNetworkNode has been added to com.groupdocs.search.scaling package.
Constructor SearchNetworkNode(int, String, com.groupdocs.search.scaling.configuring.INetworkSettings) has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Constructor SearchNetworkNode(int, String, com.groupdocs.search.scaling.configuring.INetworkSettings, com.groupdocs.search.common.ILogger) has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Constructor SearchNetworkNode(int, String, com.groupdocs.search.scaling.configuring.INetworkSettings, com.groupdocs.search.common.ILogger, com.groupdocs.search.scaling.configuring.Configuration) has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method void configureAllNodes() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method void configureNode(int) has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method com.groupdocs.search.common.CustomExtractorCollection getCustomExtractors() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method void close() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method com.groupdocs.search.scaling.events.NodeEventHub getEvents() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method int getNodeIndex(int) has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method int[] getShardIndices() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method com.groupdocs.search.scaling.Indexer getIndexer() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method int getNodeIndex() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method com.groupdocs.search.scaling.Searcher getSearcher() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method void setOcrConnector(com.groupdocs.search.options.IOcrConnector) has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method void setWordFormsProvider(com.groupdocs.search.dictionaries.IWordFormsProvider) has been added to com.groupdocs.search.scaling.SearchNetworkNode class.
Method void start() has been added to com.groupdocs.search.scaling.SearchNetworkNode class.

Enum SearchNetworkStatus has been added to com.groupdocs.search.scaling package.
Field com.groupdocs.search.scaling.SearchNetworkStatus ChangingAttributes has been added to com.groupdocs.search.scaling.SearchNetworkStatus enum.
Field com.groupdocs.search.scaling.SearchNetworkStatus Configuring has been added to com.groupdocs.search.scaling.SearchNetworkStatus enum.
Field com.groupdocs.search.scaling.SearchNetworkStatus Deleting has been added to com.groupdocs.search.scaling.SearchNetworkStatus enum.
Field com.groupdocs.search.scaling.SearchNetworkStatus Indexing has been added to com.groupdocs.search.scaling.SearchNetworkStatus enum.
Field com.groupdocs.search.scaling.SearchNetworkStatus Optimizing has been added to com.groupdocs.search.scaling.SearchNetworkStatus enum.
Field com.groupdocs.search.scaling.SearchNetworkStatus Ready has been added to com.groupdocs.search.scaling.SearchNetworkStatus enum.
Field com.groupdocs.search.scaling.SearchNetworkStatus Synchronizing has been added to com.groupdocs.search.scaling.SearchNetworkStatus enum.

Class StatusChangedEventArgs has been added to com.groupdocs.search.scaling.events package.
Method com.groupdocs.search.scaling.SearchNetworkStatus getNewStatus() has been added to com.groupdocs.search.scaling.events.StatusChangedEventArgs class.
Method com.groupdocs.search.scaling.SearchNetworkStatus getOldStatus() has been added to com.groupdocs.search.scaling.events.StatusChangedEventArgs class.

Class SynchronizeOptions has been added to com.groupdocs.search.options package.
Constructor SynchronizeOptions() has been added to com.groupdocs.search.options.SynchronizeOptions class.
Method boolean isAsync() has been added to com.groupdocs.search.options.SynchronizeOptions class.
Method void setAsync(boolean) has been added to com.groupdocs.search.options.SynchronizeOptions class.

Class TcpSettings has been added to com.groupdocs.search.scaling.configuring package.
Constructor TcpSettings(int, int, int) has been added to com.groupdocs.search.scaling.configuring.TcpSettings class.
Method int getListeningPort() has been added to com.groupdocs.search.scaling.configuring.TcpSettings class.
Method int getReceiveTimeout() has been added to com.groupdocs.search.scaling.configuring.TcpSettings class.
Method int getSendTimeout() has been added to com.groupdocs.search.scaling.configuring.TcpSettings class.

Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.AliasDictionary class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.Alphabet class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.CharacterReplacementDictionary class.
Method void clear() has been added to com.groupdocs.search.dictionaries.DictionaryBase class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.DictionaryBase class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.HomophoneDictionary class.
Method String getEncoding() has been added to com.groupdocs.search.options.IndexingOptions class.
Method void setEncoding(String) has been added to com.groupdocs.search.options.IndexingOptions class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.PasswordDictionary class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.SpellingCorrector class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.StopWordDictionary class.
Method com.groupdocs.search.dictionaries.DictionaryType getDictionaryType() has been added to com.groupdocs.search.dictionaries.SynonymDictionary class.
Method String getEncoding() has been added to com.groupdocs.search.options.UpdateOptions class.
Method void setEncoding(String) has been added to com.groupdocs.search.options.UpdateOptions class.

Use cases

The following example demonstrates how to configure a search network and run a main node.

private static SearchNetworkNode configure() {
    int basePort = 49901;
    Configuration configuration = new Configurator()
        .setIndexSettings()
            .setUseStopWords(false)
            .setUseCharacterReplacements(false)
            .setTextStorageSettings(true, Compression.High)
            .setIndexType(IndexType.NormalIndex)
            .setSearchThreads(NumberOfThreads.Default)
            .completeIndexSettings()
        .addNode(0)
            .setTcpEndpoint("192.168.1.76", basePort)
            .addLogSink()
            .addIndexer("C:\\Indexer0")
            .addSearcher("C:\\Searcher0")
            .completeNode()
        .addNode(1)
            .setTcpEndpoint("192.168.1.143", basePort)
            .addShard("C:\\Shard1")
            .addExtractor("C:\\Extractor1")
            .completeNode()
        .completeConfiguration();

    int sendTimeout = 3000;
    int receiveTimeout = 3000;
    TcpSettings tcpSettings = new TcpSettings(basePort, sendTimeout, receiveTimeout);
    SearchNetworkNode node = new SearchNetworkNode(0, "C:\\Node0", tcpSettings, new ConsoleLogger(), configuration);

    System.out.println("Configuring");
    node.configureAllNodes();
    node.start();

    return node;
}

The following example demonstrates how to subscribe to events on the main node.

private static void subscibe(SearchNetworkNode node) {
    node.getEvents().IndexingCompleted.add(new EventHandler() {
        @Override
        public void invoke(Object s, EventArgs e) {
            System.out.println();
            System.out.println("Indexing complete");
        }
    });
    node.getEvents().DeletionCompleted.add(new EventHandler() {
        @Override
        public void invoke(Object s, EventArgs e) {
            System.out.println();
            System.out.println("Deleting complete");
        }
    });
    node.getEvents().OptimizationCompleted.add(new EventHandler() {
        @Override
        public void invoke(Object s, EventArgs e) {
            System.out.println();
            System.out.println("Optimization complete");
        }
    });
    node.getEvents().AttributeChangesCompleted.add(new EventHandler() {
        @Override
        public void invoke(Object s, EventArgs e) {
            System.out.println();
            System.out.println("Attribute changes complete");
        }
    });
    node.getEvents().ConfigurationCompleted.add(new EventHandler() {
        @Override
        public void invoke(Object s, EventArgs e) {
            System.out.println();
            System.out.println("Configuration complete");
        }
    });
    node.getEvents().StatusChanged.add(new EventHandler<StatusChangedEventArgs>() {
        @Override
        public void invoke(Object s, StatusChangedEventArgs e) {
            System.out.println();
            System.out.println(e.getOldStatus().name() + " -> " + e.getNewStatus().name());
        }
    });
    node.getEvents().DataExtracted.add(new EventHandler<DataExtractedEventArgs>() {
        @Override
        public void invoke(Object s, DataExtractedEventArgs e) {
            System.out.println("Extracted " + e.getExtractorIndex() + ": " + e.getDocumentKey());
        }
    });
    node.getEvents().DocumentIndexed.add(new EventHandler<DocumentIndexedEventArgs>() {
        @Override
        public void invoke(Object s, DocumentIndexedEventArgs e) {
            System.out.println("Indexed " + e.getShardIndex() + ": " + e.getDocumentKey());
        }
    });
}

The following example demonstrates how to add documents to the distributed index on the main node.

private static void addToIndex(SearchNetworkNode node, ArrayList<String> filePaths) throws IOException, FileNotFoundException {
    InputStream[] streams = new InputStream[filePaths.size()];
    Document[] documents = new Document[filePaths.size()];
    String[] passwords = new String[filePaths.size()];
    for (int i = 0; i < filePaths.size(); i++) {
        String filePath = filePaths.get(i);
        String extension = FilenameUtils.getExtension(filePath);
        InputStream stream = new FileInputStream(filePath);
        streams[i] = stream;
        Document document = Document.createFromStream(
            filePath,
            new Date(),
            extension,
            stream);
        documents[i] = document;
    }

    Indexer indexer = node.getIndexer();
    IndexingOptions options = new IndexingOptions();
    options.setAsync(false);
    indexer.add(documents, passwords, options);

    for (InputStream stream : streams) {
        stream.close();
    }
}

The following example demonstrates how to search in the distributed index on the main node.

private static void searchInIndex(SearchNetworkNode node, String word) {
    SearchQuery query = SearchQuery.createWordQuery(word);
    System.out.println("Search first for: " + query);
    Searcher searcher = node.getSearcher();
    SearchOptions options = new SearchOptions();
    options.setChunkSearch(true);
    int hits = 0;
    ArrayList<NetworkFoundDocument> docs = new ArrayList<NetworkFoundDocument>();

    NetworkSearchResult result = searcher.searchFirst(query, options);

    addDocsFromResult(docs, result);
    hits += result.getOccurrenceCount();
    traceResult(result);

    while (result.getNextChunkSearchToken() != null) {
        System.out.println("Search next");

        result = searcher.searchNext(result.getNextChunkSearchToken());

        addDocsFromResult(docs, result);
        hits += result.getOccurrenceCount();
        traceResult(result);
    }
    System.out.println("Total documents: " + docs.size());
    System.out.println("Total occurrences: " + hits);
}

The following example shows how to put it all together on the main node.

static void run() throws IOException, Exception {
    String licensePath = "C:\\License.lic";
    new License().setLicense(licensePath);

    String directory = "C:\\Documents";

    final File folder = new File(directory);
    ArrayList<String> paths = new ArrayList<String>();
    listFiles(folder, paths);

    System.out.println("Total files: " + paths.size());

    SearchNetworkNode node = configure();

    subscibe(node);

    addToIndex(node, paths);

    searchInIndex(node, "house");

    System.out.println("Done");
}

private static void listFiles(final File folder, ArrayList<String> list) {
    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFiles(fileEntry, list);
        } else {
            list.add(fileEntry.getPath());
        }
    }
}

private static void traceResult(NetworkSearchResult result) {
    System.out.println("From node " + result.getNodeIndex() + ": occurrence count - " + result.getOccurrenceCount());
}

private static void addDocsFromResult(ArrayList<NetworkFoundDocument> docs, NetworkSearchResult result) {
    for (int i = 0; i < result.getDocumentCount(); i++) {
        docs.add(result.getFoundDocument(i));
    }
}

The following example shows how to create a simple logger for a remote node.

public static class ConsoleLogger implements ILogger {
    @Override
    public final void error(String message) {
        System.out.println("Error: " + message);
    }

    @Override
    public final void trace(String message) {
        System.out.println("Trace: " + message);
    }
}

The following example shows how to set up a remote node.

static void main(String[] args) throws Exception {
    String licensePath = "C:\\License.lic";
    new License().setLicense(licensePath);

    System.out.println("Initializing");
    int sendTimeout = 3000;
    int receiveTimeout = 3000;
    TcpSettings tcpSettings = new TcpSettings(49901, sendTimeout, receiveTimeout);
    SearchNetworkNode node1 = new SearchNetworkNode(1, "C:\\Node1", tcpSettings, new ConsoleLogger());

    System.out.println("Configuring");
    node1.start();
}

Implement a search option to get attributes in search results

This enhancement implements the option to retrieve document attributes in search results.

Public API changes

Method String[] getAttributes() has been added to com.groupdocs.search.results.FoundDocument class.
Method boolean getRetrieveAttributes() has been added to com.groupdocs.search.options.SearchOptions class.
Method void setRetrieveAttributes(boolean) has been added to com.groupdocs.search.options.SearchOptions class.

Use cases

The following example demonstrates how to retrieve document attributes in search results.

String indexFolder = "c:\\MyIndex\\";
String documentsFolder = "c:\\MyDocuments\\";

// Creating an index in the specified folder
com.groupdocs.search.Index index = new com.groupdocs.search.Index(indexFolder);

// Indexing documents from the specified folder
index.add(documentsFolder);

// Setting document attributes
AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addToAll("Marked");
index.changeAttributes(batch);

// Search with retrieving attributes
SearchOptions options = new SearchOptions();
options.setRetrieveAttributes(true);
SearchResult result = index.search("relativity", options);

for (int i = 0; i < result.getDocumentCount(); i++) {
    FoundDocument document = result.getFoundDocument(i);
    System.out.println(document.getDocumentInfo().getFilePath());
    for (String attribute : document.getAttributes()) {
        System.out.println("\t" + attribute);
    }
}

Remove indexing options from index settings

This breaking change moves indexing options from index settings to option classes.

Public API changes

Method boolean getAutoDetectEncoding() has been removed from com.groupdocs.search.IndexSettings class.
Method void setAutoDetectEncoding(boolean) has been removed from com.groupdocs.search.IndexSettings class.
Method boolean getUseRawTextExtraction() has been removed from com.groupdocs.search.IndexSettings class.
Method void setUseRawTextExtraction(boolean) has been removed from com.groupdocs.search.IndexSettings class.

Method boolean getAutoDetectEncoding() has been added to com.groupdocs.search.options.ExtractionOptions class.
Method void setAutoDetectEncoding(boolean) has been added to com.groupdocs.search.options.ExtractionOptions class.
Method boolean getAutoDetectEncoding() has been added to com.groupdocs.search.options.IndexingOptions class.
Method void setAutoDetectEncoding(boolean) has been added to com.groupdocs.search.options.IndexingOptions class.
Method boolean getAutoDetectEncoding() has been added to com.groupdocs.search.options.UpdateOptions class.
Method void setAutoDetectEncoding(boolean) has been added to com.groupdocs.search.options.UpdateOptions class.
Method boolean getUseRawTextExtraction() has been added to com.groupdocs.search.options.IndexingOptions class.
Method void setUseRawTextExtraction(boolean) has been added to com.groupdocs.search.options.IndexingOptions class.
Method boolean getUseRawTextExtraction() has been added to com.groupdocs.search.options.TextOptions class.
Method void setUseRawTextExtraction(boolean) has been added to com.groupdocs.search.options.TextOptions class.
Method boolean getUseRawTextExtraction() has been added to com.groupdocs.search.options.UpdateOptions class.
Method void setUseRawTextExtraction(boolean) has been added to com.groupdocs.search.options.UpdateOptions class.

Use cases

The following example demonstrates the use of moved options.

String indexFolder = "c:\\MyIndex";
String documentFilePath = "c:\\MyDocuments\\ExampleDocument.txt";

// Creating an index
IndexSettings settings = new IndexSettings();
com.groupdocs.search.Index index = new com.groupdocs.search.Index(indexFolder, settings);

// Indexing document from the file
IndexingOptions options = new IndexingOptions();
options.setAutoDetectEncoding(true);
options.setUseRawTextExtraction(false);
index.add(documentFilePath, options);

Remove obsolete text highlighters

This breaking change removes deprecated classes for highlighting search results in text, also removes obsolete output adapter constructors.

Public API changes

Class HtmlFragmentHighlighter has been removed from com.groupdocs.search.highlighters package.
Class HtmlHighlighter has been removed from com.groupdocs.search.highlighters package.

Constructor FileOutputAdapter(String) has been removed from com.groupdocs.search.common.FileOutputAdapter class.
Constructor StreamOutputAdapter(InputStream) has been removed from com.groupdocs.search.common.StreamOutputAdapter class.
Constructor StringOutputAdapter() has been removed from com.groupdocs.search.common.StringOutputAdapter class.

Use cases

None.

Remove static create method from AttributeChangeBatch class

This breaking change removes the static create() method from the AttributeChangeBatch class. Please use the constructor to create an instance of the AttributeChangeBatch class.

Public API changes

Method AttributeChangeBatch create() has been removed from com.groupdocs.search.common.AttributeChangeBatch class.
Constructor AttributeChangeBatch() has been added to com.groupdocs.search.common.AttributeChangeBatch class.

Use cases

None.