אנחנו שמחים להודיע על שחרור 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
- חבילה: groupdocs-search-net 26.10.0
- פקודת התקנה:
pip install groupdocs-search-net==26.10.0
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