אנחנו שמחים להודיע על שחרור GroupDocs.Search for Python v26.10, זמין החל מ-נובמבר 2026. זהו השחרור הראשוני של המוצר, המביא את הפונקציונליות המלאה של מנוע GroupDocs.Search 26.10 למפתחים ב-Python. הוא מאפשר לבנות ולתחזק אינדקסים של טקסט מלא על תיקיות של מסמכים — כולל PDF, Word, Excel, PowerPoint, דוא"ל, eBook, ארכיון והרבה פורמטים אחרים (80+ בסך הכל) — ולחפש בהם עם סוגי שאילתות מתקדמים: מילות מפתח, ביטוי, תו כללי, regex, fuzzy, boolean, faceted, וחיפושי טווח תאריכים. השחרור תומך ב-Python 3.5–3.14 ב-Windows x64, Linux x64 (glibc 2.27+), וב-macOS 13+ (Intel ו-Apple Silicon), ומשלב את סביבת הריצה .NET 10.0.14.

מה חדש בגרסה זו

  • [Feature] שחרור ראשוני של GroupDocs.Search for Python דרך .NET (SEARCHPYTHONNET-40)

שינויים בממשק API ציבורי

זהו השחרור הראשון, ולכן אין מה לשדרג. ה-API מתיישב עם GroupDocs.Search for .NET 26.10: המחלקות שומרות על שמות .NET שלהן, בעוד שהמתודות, המאפיינים והפרמטרים נכתבים ב‑snake_case (Index.Search הוא index.search, SearchResult.DocumentCount הוא result.document_count) וחברי המונה במצב Upper case (OutputFormat.HTML). הקצאת תכונה שמחלקה אינה מכילה גוררת AttributeError עם רמז “Did you mean”, במקום ליצור תכונה ייחודית ל‑Python שהמנוע לעולם לא רואה.

מודולים

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

תכונות חדשות

אינדקס מסמכים וחיפוש בהם

Index(folder) יוצר אינדקס בתיקייה, או פותח את האינדקס שכבר קיים שם. add() מאנדקס תיקייה, קובץ, רשימת נתיבים, זרמים או נתונים מחולצים, ו‑search() מקבל שאילתה בשפת השאילתות של GroupDocs.Search: מילות מפתח, ביטויים במרכאות, תווים כלליים (? לתו יחיד, ?(1~5) לאחד עד חמישה), ביטויים רגולריים אחרי ^, AND, OR ו‑NOT, שאילתות שדה כגון content: Bern או filename: einstein, וטווחי תאריכים ומספרים. SearchQuery בונה את אותן השאילתות כאובייקטים.

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

חיפוש מעורפל, חיפוש במילים נרדפות וצורת מילה

חיפוש מעורפל מתיר שגיאות הקלדה ו‑OCR. חיפוש במילים נרדפות, הומופונים וצורת מילה מרחיב שאילתה דרך המילונים האנגליים המובנים, אותם ניתן לערוך דרך index.dictionaries, ותיקון איות ופריסת מקלדת הם גם אפשרויות חיפוש.

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)

הדגש את מה שנמצא

DocumentHighlighter כותב את כל המסמך עם המונחים שנמצאו מודגשים, ו‑FragmentHighlighter רק את הקטעים סביבם, כ‑HTML או טקסט פשוט, לקובץ, למחרוזת או לאובייקט קובץ בינרי.

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 כמטפלים ב-Python

כל אירוע של האינדקס הוא אירוע Python: מנויים עם += ומבטלים מנוי עם -=. מטפל יכול לדלג על מסמך, לתייג אותו עם תכונות או לספק את הסיסמה שלו, ועוקב אחרי ההתקדמות, השגיאות והשלבים של האינדקסציה והחיפוש.

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 לנקודות ההרחבה של המנוע

מחולצים מותאמים אישית של טקסט לפורמטים שלכם, רושמים, מפצלי מילים, ספקי צורות מילים, טועני מסמכים ומחברי OCR הם אובייקטים או פונקציות של Python, שהמנוע קורא אליהם דרך הממשקים שלו.

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

שמירת אינדקס מעודכן

אינדקס הוא תיקייה: בונים אותו פעם אחת ופותחים אותו בריצה מאוחרת יותר. update() מאנדקס מחדש רק את המסמכים שהשתנו מאז add() או update() האחרון, optimize() ממזג את מקטעי האינדקס, ו‑delete() מוחק מסמכים לפי נתיב.

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

רישיון מהסביבה

הגדר GROUPDOCS_LIC_PATH לנתיב או ל‑URL של קובץ רישיון, והרישיון יוחל בפעם הראשונה שהמנוע נקרא; License().set_license(path) עושה את אותו הדבר בקוד. רישיון שלא ניתן להחיל גורר LicenseError מהקריאה הראשונה והלאה, במקום לחזור למצב הערכה. ללא רישיון, אינדקס מוגבל ל‑100 מסמכים ול‑10 המסמכים הראשונים שנמצאו בחיפוש שניתן לקרוא.

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

דוגמת קוד

ראו את הסעיפים “אינדקס מסמכים וחיפוש בהם”, “חיפוש מעורפל, חיפוש במילים נרדפות וצורת מילה”, “הדגש את מה שנמצא”, “אירועי .NET כמטפלים ב-Python”, “אובייקטים של Python לנקודות ההרחבה של המנוע”, ו‑“שמירת אינדקס מעודכן” למעלה לקבלת דוגמאות קוד עובדות.

איך לקבל את העדכון

PyPI

Direct download

הורידו את קובץ ה‑wheel לפלטפורמה שלכם מהדף GroupDocs.Search for Python via .NET 26.10 ולאחר מכן התקינו את הקובץ:

  • 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

משאבים