Kami senang mengumumkan rilis GroupDocs.Search for Python v26.10, tersedia sejak November 2026. Ini adalah rilis awal produk, membawa fungsionalitas penuh mesin GroupDocs.Search 26.10 ke pengembang Python. Ini memungkinkan pembuatan dan pemeliharaan indeks teks penuh atas folder dokumen — termasuk PDF, Word, Excel, PowerPoint, email, eBook, arsip, dan banyak format lainnya (lebih dari 80 total) — serta pencarian dengan tipe kueri lanjutan: kata kunci, frasa, wildcard, regex, fuzzy, boolean, faceted, dan pencarian rentang tanggal. Rilis ini mendukung Python 3.5–3.14 pada Windows x64, Linux x64 (glibc 2.27+), dan macOS 13+ (Intel dan Apple Silicon), menyematkan runtime .NET 10.0.14.
Apa yang baru di rilis ini
- [Feature] Rilis awal GroupDocs.Search untuk Python via .NET (SEARCHPYTHONNET-40)
Perubahan API Publik
Ini adalah rilis pertama, jadi tidak ada yang perlu ditingkatkan. API mengikuti GroupDocs.Search for .NET 26.10: kelas mempertahankan nama .NET mereka, sementara metode, properti, dan parameter ditulis dalam snake_case (Index.Search menjadi index.search, SearchResult.DocumentCount menjadi result.document_count) dan anggota enum dalam huruf besar (OutputFormat.HTML). Menetapkan atribut yang tidak dimiliki kelas akan memunculkan AttributeError dengan petunjuk “Did you mean”, alih-alih membuat atribut khusus Python yang tidak pernah dilihat mesin.
Modul
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.
Fitur Baru
Mengindeks dokumen dan mencarinya
Index(folder) membuat indeks dalam sebuah folder, atau membuka indeks yang sudah ada. add() mengindeks sebuah folder, sebuah file, daftar path, stream, atau data yang diekstrak, dan search() menerima kueri dalam bahasa kueri GroupDocs.Search: kata kunci, frasa dalam tanda kutip, wildcard (? untuk satu karakter, ?(1~5) untuk satu sampai lima), ekspresi reguler setelah ^, AND, OR, dan NOT, kueri bidang seperti content: Bern atau filename: einstein, serta rentang tanggal dan angka. SearchQuery membangun kueri yang sama sebagai objek.
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))
Pencarian fuzzy, sinonim, dan bentuk kata
Pencarian fuzzy toleran terhadap kesalahan pengetikan dan OCR. Pencarian sinonim, homofon, dan bentuk kata memperluas kueri melalui kamus bahasa Inggris bawaan, yang dapat Anda edit melalui index.dictionaries, dan koreksi ejaan serta tata letak keyboard juga merupakan opsi pencarian.
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)
Sorot apa yang ditemukan
DocumentHighlighter menulis seluruh dokumen dengan istilah yang ditemukan ditandai, dan FragmentHighlighter hanya fragmen di sekitarnya, sebagai HTML atau teks biasa, ke dalam file, string, atau objek file biner.
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")
Event .NET sebagai handler Python
Setiap event pada indeks adalah event Python: berlangganan dengan += dan berhenti berlangganan dengan -=. Sebuah handler dapat melewatkan dokumen, menandainya dengan atribut, atau menyediakan kata sandinya, serta mengikuti kemajuan, kesalahan, dan fase-fase pengindeksan serta pencarian.
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")
Objek Python untuk titik ekstensi mesin
Ekstraktor teks khusus untuk format buatan Anda, logger, pemisah kata, penyedia bentuk kata, pemuat dokumen, dan konektor OCR adalah objek atau fungsi Python biasa, yang dipanggil mesin melalui antarmukanya.
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")
Menjaga indeks tetap terbaru
Sebuah indeks adalah folder: bangun sekali dan buka kembali pada eksekusi berikutnya. update() mengindeks ulang hanya dokumen yang berubah sejak add() atau update() terakhir, optimize() menggabungkan segmen indeks, dan delete() menghapus dokumen berdasarkan path.
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")
Lisensi dari lingkungan
Setel GROUPDOCS_LIC_PATH ke path atau URL file lisensi, dan lisensi akan diterapkan pada pemanggilan pertama ke mesin; License().set_license(path) melakukan hal yang sama dalam kode. Lisensi yang tidak dapat diterapkan akan memunculkan LicenseError sejak pemanggilan pertama, alih-alih kembali ke mode evaluasi. Tanpa lisensi, sebuah indeks maksimal berisi 100 dokumen dan hanya 10 dokumen pertama yang ditemukan dalam pencarian yang dapat dibaca.
export GROUPDOCS_LIC_PATH="/path/to/GroupDocs.Search.lic"
Contoh kode
Lihat bagian “Mengindeks dokumen dan mencarinya”, “Pencarian fuzzy, sinonim, dan bentuk kata”, “Sorot apa yang ditemukan”, “Event .NET sebagai handler Python”, “Objek Python untuk titik ekstensi mesin”, dan “Menjaga indeks tetap terbaru” di atas untuk contoh kode yang berfungsi.
Cara mendapatkan pembaruan
PyPI
- Package: groupdocs-search-net 26.10.0
- Install command:
pip install groupdocs-search-net==26.10.0
Unduhan langsung
Unduh wheel untuk platform Anda dari halaman GroupDocs.Search for Python via .NET 26.10, lalu instal file tersebut:
- 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