We zijn blij de release van GroupDocs.Search for Python v26.10 aan te kondigen, beschikbaar vanaf november 2026. Dit is de eerste release van het product, die de volledige functionaliteit van de GroupDocs.Search 26.10 engine naar Python‑ontwikkelaars brengt. Het maakt het mogelijk om full‑text indexen te bouwen en te onderhouden over mappen met documenten — inclusief PDF, Word, Excel, PowerPoint, e‑mail, e‑book, archief en vele andere formaten (meer dan 80 in totaal) — en ze te doorzoeken met geavanceerde query‑typen: keyword, phrase, wildcard, regex, fuzzy, boolean, faceted en date‑range zoekopdrachten. De release ondersteunt Python 3.5–3.14 op Windows x64, Linux x64 (glibc 2.27+), en macOS 13+ (Intel en Apple Silicon), met de .NET 10.0.14 runtime.

Wat is nieuw in deze release

  • [Feature] Eerste release van GroupDocs.Search voor Python via .NET (SEARCHPYTHONNET-40)

Wijzigingen in de openbare API

Dit is de eerste release, dus er is niets om van te upgraden. De API volgt GroupDocs.Search voor .NET 26.10: klassen behouden hun .NET namen, terwijl methoden, eigenschappen en parameters in snake_case worden geschreven (Index.Search is index.search, SearchResult.DocumentCount is result.document_count) en enum‑leden in hoofdletters (OutputFormat.HTML). Het toewijzen van een attribuut dat een klasse niet heeft, veroorzaakt een AttributeError met een “Did you mean” hint, in plaats van een alleen‑Python attribuut te creëren dat de engine nooit ziet.

Modules

  • groupdocs.search: Index, IndexSettings, IndexRepository, IndexUpdater, SearchQuery, Extractor, License, Metered, GroupDocsSearchException, LicenseError, CancellationTokenSource.
  • groupdocs.search.options: IndexingOptions, SearchOptions, FuzzySearchOptions, SimilarityLevel, UpdateOptions, HighlightOptions, OutputFormat, SeparateProcessOptions, ImageSearchOptions.
  • groupdocs.search.results: SearchResult, FoundDocument, FoundDocumentField, DocumentInfo, FileType, FormatFamily.
  • groupdocs.search.highlighters: DocumentHighlighter, FragmentHighlighter.
  • groupdocs.search.common: FileOutputAdapter, StringOutputAdapter, StreamOutputAdapter, Document, DocumentField, ExtractedData, FileLogger, AttributeChangeBatch.
  • groupdocs.search.dictionaries: SynonymDictionary, HomophoneDictionary, StopWordDictionary, SpellingCorrector, AliasDictionary, CharacterReplacementPair.
  • groupdocs.search.events: EventHub, FileIndexingEventArgs, IndexErrorEventArgs, OperationProgressEventArgs, PasswordRequiredEventArgs.
  • groupdocs.search.exceptions: SearchException, LicenseRestrictionException.
  • groupdocs.search.scaling: SearchNetworkNode, Indexer, Searcher.
  • groupdocs.search.scaling.configuring: Configuration, Configurator, TcpSettings.

Nieuwe functies

Documenten indexeren en doorzoeken

Index(folder) maakt een index aan in een map, of opent een reeds bestaande index. add() indexeert een map, een bestand, een lijst met paden, streams of geëxtraheerde data, en search() neemt een query in de GroupDocs.Search query‑taal: keywords, zinnen tussen aanhalingstekens, wildcards (? voor één teken, ?(1~5) voor één tot vijf), reguliere expressies na ^, AND, OR en NOT, veld‑queries zoals content: Bern of filename: einstein, en datum‑ en getal‑bereiken. SearchQuery bouwt dezelfde queries als objecten.

from groupdocs.search import Index

with Index("./index") as index:              # creates the index folder, or opens it
    index.add("./documents")                 # indexes every supported file in the folder
    for query in ["relativity", '"theory of relativity"', "relativ?ty",
                  "^relativ.*", "Einstein AND NOT Newton", "content: Bern"]:
        result = index.search(query)
        print("%-26s %d documents, %d occurrences"
              % (query, result.document_count, result.occurrence_count))

Fuzzy, synoniem en woordvorm zoekopdrachten

Fuzzy‑search tolereert type‑ en OCR‑fouten. Synoniem-, homoniem- en woordvorm‑search verbreden een query via de ingebouwde Engelse woordenboeken, die je kunt bewerken via index.dictionaries, en spelling‑ en toetsenbord‑indelingcorrectie zijn ook zoekopties.

from groupdocs.search import Index
from groupdocs.search.options import SearchOptions, SimilarityLevel

with Index("./index") as index:
    index.add("./documents")

    fuzzy = SearchOptions()
    fuzzy.fuzzy_search.enabled = True
    fuzzy.fuzzy_search.fuzzy_algorithm = SimilarityLevel(0.8)   # 0.0 (loose) .. 1.0 (strict)
    print("relativty:", index.search("relativty").document_count,
          "->", index.search("relativty", fuzzy).document_count)

    synonyms = SearchOptions()
    synonyms.use_synonym_search = True
    print("picture:", index.search("picture").document_count,
          "->", index.search("picture", synonyms).document_count)

    word_forms = SearchOptions()
    word_forms.use_word_forms_search = True
    print("letter:", index.search("letter").document_count,
          "->", index.search("letter", word_forms).document_count)

Markeer wat gevonden is

DocumentHighlighter schrijft een heel document met de gevonden termen gemarkeerd, en FragmentHighlighter alleen de fragmenten eromheen, als HTML of platte tekst, naar een bestand, een string of een binair bestandsobject.

from groupdocs.search import Index
from groupdocs.search.common import FileOutputAdapter
from groupdocs.search.highlighters import DocumentHighlighter
from groupdocs.search.options import OutputFormat

with Index("./index") as index:
    index.add("./documents")
    result = index.search("relativity")
    if result.document_count > 0:
        found = result.get_found_document(0)
        adapter = FileOutputAdapter(OutputFormat.HTML, "./highlighted.html")
        index.highlight(found, DocumentHighlighter(adapter))
        print(found.document_info.file_path, "-> highlighted.html")

.NET‑events als Python‑handlers

Elk event van de index is een Python‑event: abonneer met += en meld af met -=. Een handler kan een document overslaan, het taggen met attributen of een wachtwoord leveren, en volgt de voortgang, fouten en fasen van indexeren en zoeken.

from groupdocs.search import Index

skipped = []

def on_file_indexing(sender, args):
    if args.document_full_path.endswith(".zip"):
        args.skip_indexing = True            # leave archives out of the index
        skipped.append(args.document_full_path)

with Index("./index") as index:
    index.events.file_indexing += on_file_indexing
    index.add("./documents")
    index.events.file_indexing -= on_file_indexing
    print(len(index.get_indexed_documents()), "documents indexed,", len(skipped), "archives skipped")

Python‑objecten voor de extensiepunten van de engine

Aangepaste tekst‑extractors voor eigen formaten, loggers, woord‑splitters, woord‑vorm‑providers, document‑loaders en OCR‑connectors zijn gewone Python‑objecten of functies, die de engine via zijn interfaces aanroept.

from groupdocs.search import Index, IndexSettings

class LogExtractor(object):
    """Text of .log files, which the engine does not read on its own."""
    extensions = [".log"]

    def get_fields(self, source):             # a file path, or the engine's stream
        if isinstance(source, str):
            with open(source, encoding="utf-8") as f:
                text = f.read()
        else:
            text = source.read().decode("utf-8")
        return [("Content", text)]

settings = IndexSettings()
settings.custom_extractors.add(LogExtractor())
with Index("./log-index", settings) as index:
    index.add("./logs")
    print(index.search("quota").document_count, "log file(s) mention a quota")

Houd een index actueel

Een index is een map: bouw deze één keer en open hem later opnieuw. update() re‑indexeert alleen de documenten die sinds de laatste add() of update() zijn gewijzigd, optimize() voegt de index‑segmenten samen, en delete() verwijdert documenten op pad.

from groupdocs.search import Index

with Index("./index") as index:
    index.add("./documents")
    # ... files in ./documents are added, changed or removed ...
    index.update()        # re-indexes only what changed
    index.optimize()      # merges index segments so searches stay fast
    print(len(index.get_indexed_documents()), "documents in the index")

Een licentie vanuit de omgeving

Stel GROUPDOCS_LIC_PATH in op het pad of de URL van een licentiebestand, en de licentie wordt toegepast bij de eerste oproep naar de engine; License().set_license(path) doet hetzelfde in code. Een licentie die niet kan worden toegepast, veroorzaakt een LicenseError vanaf die eerste oproep, in plaats van terug te vallen op evaluatiemodus. Zonder licentie kan een index maximaal 100 documenten bevatten en kunnen slechts de eerste 10 gevonden documenten van een zoekopdracht worden gelezen.

export GROUPDOCS_LIC_PATH="/path/to/GroupDocs.Search.lic"

Codevoorbeeld

Zie de secties “Documenten indexeren en doorzoeken”, “Fuzzy, synoniem en woordvorm zoekopdrachten”, “Markeer wat gevonden is”, “.NET‑events als Python‑handlers”, “Python‑objecten voor de extensiepunten van de engine” en “Houd een index actueel” hierboven voor werkende code‑voorbeelden.

Hoe de update te verkrijgen

PyPI

Directe download

Download het wheel voor uw platform vanaf de GroupDocs.Search for Python via .NET 26.10 pagina, en installeer vervolgens het bestand:

  • Windows x64: pip install groupdocs_search_net-26.10.0-py3-none-win_amd64.whl
  • Linux x64: pip install groupdocs_search_net-26.10.0-py3-none-manylinux_2_27_x86_64.whl
  • macOS Intel: pip install groupdocs_search_net-26.10.0-py3-none-macosx_13_0_x86_64.whl
  • macOS Apple Silicon: pip install groupdocs_search_net-26.10.0-py3-none-macosx_13_0_arm64.whl

Bronnen