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
- Package: groupdocs-search-net 26.10.0
- Install command:
pip install groupdocs-search-net==26.10.0
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