Wir freuen uns, die Veröffentlichung von GroupDocs.Search for Python v26.10 bekannt zu geben, verfügbar seit November 2026. Dies ist die Erstveröffentlichung des Produkts, die die volle Funktionalität der GroupDocs.Search 26.10 Engine für Python‑Entwickler bereitstellt. Sie ermöglicht das Erstellen und Pflegen von Volltextindizes über Ordner mit Dokumenten — einschließlich PDF, Word, Excel, PowerPoint, E‑Mail, eBook, Archiv und vielen anderen Formaten (über 80 insgesamt) — und das Durchsuchen mit erweiterten Abfragetypen: Schlüsselwort, Phrase, Platzhalter, Regex, Fuzzy, Boolesch, facettiert und Datumsbereichssuchen. Die Veröffentlichung unterstützt Python 3.5–3.14 unter Windows x64, Linux x64 (glibc 2.27+), und macOS 13+ (Intel und Apple Silicon) und bettet die .NET 10.0.14 Runtime ein.

Was ist neu in dieser Version

  • [Feature] Erstveröffentlichung von GroupDocs.Search for Python via .NET (SEARCHPYTHONNET-40)

Änderungen an der öffentlichen API

Dies ist die erste Veröffentlichung, daher gibt es nichts zu aktualisieren. Die API folgt GroupDocs.Search for .NET 26.10: Klassen behalten ihre .NET‑Namen bei, während Methoden, Eigenschaften und Parameter in snake_case geschrieben werden (Index.Search ist index.search, SearchResult.DocumentCount ist result.document_count) und Aufzählungs­mitglieder in Großbuchstaben (OutputFormat.HTML). Das Zuweisen eines Attributs, das eine Klasse nicht besitzt, löst AttributeError mit einem „Meinten Sie…“-Hinweis aus, anstatt ein rein Python‑Attribut zu erstellen, das die Engine nie sieht.

Module

  • 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.

Neue Funktionen

Dokumente indizieren und durchsuchen

Index(folder) erstellt einen Index in einem Ordner oder öffnet einen bereits vorhandenen Index. add() indiziert einen Ordner, eine Datei, eine Liste von Pfaden, Streams oder extrahierte Daten, und search() nimmt eine Abfrage in der GroupDocs.Search‑Abfragesprache entgegen: Schlüsselwörter, Phrasen in Anführungszeichen, Platzhalter (? für ein Zeichen, ?(1~5) für eins bis fünf), reguläre Ausdrücke nach ^, AND, OR und NOT, Feldabfragen wie content: Bern oder filename: einstein sowie Datums‑ und Zahlenbereiche. SearchQuery erstellt dieselben Abfragen als Objekte.

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-, Synonym- und Wortformen‑Suche

Fuzzy‑Suche toleriert Tipp‑ und OCR‑Fehler. Synonym‑, Homophon‑ und Wortformen‑Suche erweitern eine Abfrage mithilfe der integrierten englischen Wörterbücher, die Sie über index.dictionaries bearbeiten können, und Rechtschreib‑ sowie Tastatur‑Layout‑Korrekturen sind ebenfalls Suchoptionen.

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)

Hervorheben, was gefunden wurde

DocumentHighlighter schreibt ein gesamtes Dokument mit den gefundenen Begriffen markiert, und FragmentHighlighter nur die Fragmente um sie herum, als HTML oder Klartext, in eine Datei, einen String oder ein Binärdatei‑Objekt.

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‑Ereignisse als Python‑Handler

Jedes Ereignis des Index ist ein Python‑Ereignis: Abonnieren mit += und Abbestellen mit -=. Ein Handler kann ein Dokument überspringen, es mit Attributen versehen oder sein Passwort bereitstellen und verfolgt den Fortschritt, Fehler und Phasen des Indexierens und Suchens.

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‑Objekte für die Erweiterungspunkte der Engine

Benutzerdefinierte Text‑Extraktoren für eigene Formate, Logger, Wort‑Splitter, Wortformen‑Provider, Dokument‑Lader und OCR‑Connectoren sind einfache Python‑Objekte oder -Funktionen, die die Engine über ihre Schnittstellen aufruft.

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")

Einen Index aktuell halten

Ein Index ist ein Ordner: Er wird einmal erstellt und später erneut geöffnet. update() indiziert nur die Dokumente neu, die seit dem letzten add() oder update() geändert wurden, optimize() fügt die Index‑Segmente zusammen und delete() entfernt Dokumente nach Pfad.

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")

Lizenz aus der Umgebung

Setzen Sie GROUPDOCS_LIC_PATH auf den Pfad oder die URL einer Lizenzdatei, und die Lizenz wird beim ersten Aufruf der Engine angewendet; License().set_license(path) bewirkt dasselbe im Code. Eine Lizenz, die nicht angewendet werden kann, löst ab dem ersten Aufruf LicenseError aus, anstatt in den Evaluierungsmodus zurückzufallen. Ohne Lizenz kann ein Index höchstens 100 Dokumente enthalten und es können nur die ersten 10 gefundenen Dokumente einer Suche gelesen werden.

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

Code‑Beispiel

Siehe die Abschnitte „Dokumente indizieren und durchsuchen“, „Fuzzy-, Synonym- und Wortformen‑Suche“, „Hervorheben, was gefunden wurde“, „.NET‑Ereignisse als Python‑Handler“, „Python‑Objekte für die Erweiterungspunkte der Engine“ und „Einen Index aktuell halten“ oben für funktionierende Code‑Beispiele.

Wie Sie das Update erhalten

PyPI

Direkter Download

Laden Sie das Wheel für Ihre Plattform von der Seite GroupDocs.Search for Python via .NET 26.10 herunter und installieren Sie die Datei:

  • 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

Ressourcen