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

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

Sumber Daya