S radostí oznamujeme vydání GroupDocs.Search for Python v26.10, dostupné od listopadu 2026. Jedná se o úvodní vydání produktu, které přináší plnou funkčnost enginu GroupDocs.Search 26.10 pro vývojáře v Pythonu. Umožňuje vytvářet a udržovat fulltextové indexy nad složkami dokumentů — včetně PDF, Word, Excel, PowerPoint, e‑mail, eBook, archiv a mnoho dalších formátů (celkem 80+) — a vyhledávat v nich pomocí pokročilých typů dotazů: klíčová slova, fráze, zástupné znaky, regulární výrazy, fuzzy, boolean, faceted a vyhledávání v rozmezích dat. Vydání podporuje Python 3.5–3.14 na Windows x64, Linux x64 (glibc 2.27+), a macOS 13+ (Intel i Apple Silicon) a vkládá runtime .NET 10.0.14.

Co je nového v tomto vydání

  • [Feature] Úvodní vydání GroupDocs.Search for Python přes .NET (SEARCHPYTHONNET-40)

Změny veřejného API

Jedná se o první vydání, takže není co aktualizovat. API odpovídá GroupDocs.Search for .NET 26.10: třídy si zachovávají své .NET názvy, zatímco metody, vlastnosti a parametry jsou psány ve snake_case (Index.Search je index.search, SearchResult.DocumentCount je result.document_count) a položky výčtů velkými písmeny (OutputFormat.HTML). Při přiřazení atributu, který třída nemá, se vyvolá AttributeError s nápovědou „Did you mean“, místo vytvoření Python‑only atributu, který engine nikdy nevidí.

Moduly

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

Nové funkce

Indexujte dokumenty a vyhledávejte v nich

Index(folder) vytvoří index ve složce nebo otevře již existující index. add() indexuje složku, soubor, seznam cest, streamy nebo extrahovaná data a search() přijímá dotaz v jazyce dotazů GroupDocs.Search: klíčová slova, fráze v uvozovkách, zástupné znaky (? pro jeden znak, ?(1~5) pro jeden až pět), regulární výrazy po ^, AND, OR a NOT, dotazy na pole jako content: Bern nebo filename: einstein a rozsahy dat a čísel. SearchQuery vytváří stejné dotazy jako objekty.

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 a word‑form vyhledávání

Fuzzy vyhledávání toleruje chyby při psaní i OCR. Synonym, homophone a word‑form vyhledávání rozšiřuje dotaz pomocí vestavěných anglických slovníků, které můžete upravovat pomocí index.dictionaries, a oprava pravopisu a rozložení klávesnice jsou také možnosti vyhledávání.

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)

Zvýrazněte nalezené

DocumentHighlighter zapíše celý dokument s označenými nalezenými výrazy a FragmentHighlighter pouze fragmenty kolem nich, jako HTML nebo prostý text, do souboru, řetězce nebo binárního souborového objektu.

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 události jako Python handlery

Každá událost indexu je Python událost: přihlásit se pomocí += a odhlásit pomocí -=. Handler může přeskočit dokument, označit jej atributy nebo poskytnout jeho heslo a sleduje průběh, chyby a fáze indexování a vyhledávání.

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 objekty pro rozšiřovací body enginu

Vlastní textové extraktory pro vaše formáty, loggery, rozdělování slov, poskytovatele word‑form, načítače dokumentů a OCR konektory jsou obyčejné Python objekty nebo funkce, které engine volá přes své rozhraní.

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

Udržujte index aktuální

Index je složka: vytvoříte jej jednou a později jej znovu otevřete. update() přeindexuje jen dokumenty, které se změnily od posledního add() nebo update(), optimize() sloučí segmenty indexu a delete() odstraní dokumenty podle cesty.

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

Licence z prostředí

Nastavte GROUPDOCS_LIC_PATH na cestu nebo URL licenčního souboru a licence se použije při prvním volání do enginu; License().set_license(path) dělá totéž v kódu. Licence, kterou nelze použít, vyvolá LicenseError od prvního volání, místo aby se přepnula do evaluačního režimu. Bez licence index obsahuje maximálně 100 dokumentů a lze přečíst jen prvních 10 nalezených dokumentů ve vyhledávání.

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

Příklad kódu

Viz sekce „Indexujte dokumenty a vyhledávejte v nich“, „Fuzzy, synonym a word‑form vyhledávání“, „Zvýrazněte nalezené“, „.NET události jako Python handlery“, „Python objekty pro rozšiřovací body enginu“ a „Udržujte index aktuální“ výše pro funkční příklady kódu.

Jak získat aktualizaci

PyPI

Přímé stažení

Stáhněte si wheel pro vaši platformu ze stránky GroupDocs.Search for Python via .NET 26.10 a poté nainstalujte soubor:

  • 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

Zdroje