Locasticsearch
البحث عن النص الكامل الخادم في بيثون
️ حالة نائمة :؟ ؟
يوفر Locasticsearch البحث عن النص الكامل بدون خادم مدعوم من إمكانيات البحث النصية الكاملة SQLite ولكنه في محاولة لتكون متوافقة مع (مجموعة فرعية من) API Elasticsearch.
وبهذه الطريقة ، يمكنك تطوير تطبيق Search Search الخاص بك بشكل مريح دون الحاجة إلى إعداد الخدمات والانتقال بسلاسة إلى Elasticsearch للحصول على الميزات أو المزيد من الميزات دون تغيير التعليمات البرمجية الخاصة بك.
ومع ذلك ، إذا كنت تقوم فقط بعمليات البحث الأساسية داخل المجموعة الفرعية التي تدعمها هذه المكتبة ، وليس لديها الكثير من المستندات (~ مليون) من شأنها أن تبرر الذهاب إلى نشر مجموعة ، يمكن أن يكون LocasticSearch بديلاً أسرع لـ Elasticsearch.
ابدء
from locasticsearch import Locasticsearch
from datetime import datetime
es = Locasticsearch()
doc = {
"author": "kimchy",
"text": "Elasticsearch: cool. bonsai cool.",
"timestamp": datetime(2010, 10, 10, 10, 10, 10),
}
res = es.index(index="test-index", doc_type="tweet", id=1, body=doc)
res = es.get(index="test-index", doc_type="tweet", id=1)
print(res["_source"])
# this will get ignored in Locasticsearch
es.indices.refresh(index="test-index")
res = es.search(index="test-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res["hits"]["total"]["value"])
for hit in res["hits"]["hits"]:
print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
نضيف أيضًا واجهة برمجة تطبيقات مبسطة يمكن تحويلها إلى Elasticsearch.
سمات
- ؟ ٪ محلي ، لا إدارة الخادم
- بيثون خفيفة الوزن ، لا تبعيات خارجية
- ⚡ عمليات البحث السريعة الفائقة بفضل إمكانيات البحث النصية الكاملة SQLite
- ؟ لا يوجد قفل. بفضل API CompatiBlity مع العميل الرسمي ، يمكنك الانتقال بسلاسة إلى Elasticsearch لمزيد من الميزات دون تغيير التعليمات البرمجية الخاصة بك.
ثَبَّتَ
pip install locasticsearch
لاستخدام أو عدم الاستخدام
يجب ألا تستخدم locasticsearch إذا:
- أنت تقوم بنشر تطبيق حساس للأمن. رمز Locasticsearch عرضة للغاية لهجمات حقن SQL. هذا يجب أن يتحسن في الإصدارات المستقبلية.
- عمليات البحث الخاصة بك أكثر تعقيدًا مما ستجده في برنامج تعليمي Elasticsearch 5 دقائق. يحتوي Elasticsearch على واجهة برمجة تطبيقات ضخمة ومن غير المرجح أن نتمكن من دعم حتى جزء كبير من ذلك.
- أنت تكره مكتبات عربات التي تجرها الدواب. Locasticsearch هو مشروع صغير للغاية بحيث يتم ضمان الأخطاء. يمكنك التحقق من الاختبارات لمعرفة ما إذا كانت احتياجاتك مغطاة.
يجب عليك استخدام locasticsearch إذا:
- أنت لا تريد Docker أو خدمة Elasticsearch باستخدام موارد ثمينة في الكمبيوتر المحمول الخاص بك
- تحتاج فقط إلى البحث عن النص الأساسي وسيكون Elasticsearch مبالغة
- تريد عمليات نشر سهلة للغاية تتضمن تثبيتات PIP فقط
- استخدام Java من برنامج Python يجعلك تشعر بالقلق
الخطوات التالية
مقارنة مع المكتبات المماثلة
بعض الأفكار السريعة حول الأدوات الحالية ، لا تتردد في إضافة/التعليق:
Whoosh
مكتبة البحث النصية الأكثر تميزا في Python Search إلى حد بعيد:
- ؟ يدعم تسليط الضوء ، المحللون ، توسيع الاستعلام ، العديد من وظائف التصنيف ، ...
- ؟ لم تتم صيانته لفترة طويلة على الرغم من أنه قد يرى إحياء في https://github.com/whoosh-community/whoosh
- ؟ Python النقي لذلك لا يتوسع أيضًا (لا يزال سريعًا بما يكفي لمجموعات البيانات الصغيرة/المتوسطة)
Elasticsearch
بطل كبير للبحث عن النص الكامل. هذا ما يجب أن تستخدمه في الإنتاج:
- ؟ الكثير من الميزات لاستيعاب أي حالة استخدام
- ؟ تم اختبار المعركة ، قابلة للتطوير ، أداء
- ؟ غير بيثون الأصلي: أكثر تعقيدًا للنشر/الاندماج مع مشروع Python لسهولة الاستخدام في حالات الاستخدام
tantivy
هذه توصية جيدة للبحث عن النص الكامل المحلي إذا كنت لا تهتم بتوافق API للبحث المرن
- ؟ سهل الإعداد والاستخدام:
pip install tantivy - ؟ محرك سريع الصدأ
- ؟ قفل DSL/Library ، بدون واجهة برمجة تطبيقات بحث مرنة
بيزرني
على الرغم من أنه ليس بيثون نقي ، فإن Pyserini هو حل وسط جيد إذا كنت تريد شيئًا محليًا وقابل للتطوير:
- ؟ Acess إلى Lucene من داخل Python (عبر جسر Pyjnius Java)
- ؟ النشر بدون خادم / محلي
- ؟ قفل DSL/Library في
- ؟ وقت تشغيل جافا إضافي
Django Haystack
توفر Django Haystack واجهة برمجة تطبيقات موحدة تتيح لك توصيل العديد من عمليات البحث الخلفية (مثل Solr ، Elasticsearch ، Whoosh ، Xapian ، إلخ) دون الحاجة إلى تعديل الكود الخاص بك:
- ؟ العديد من الميزات ، تعزيز ، تسليط الضوء ، الإكمال التلقائي (بعضها يعتمد على الواجهة الخلفية)
- ؟ إمكانية تبديل الخلفية
- ؟ قفل DSL/Library في
- ؟ على الرغم من دعم العديد من الخلفية ، فإن Whoosh هو الوحيد الذي هو Python الأصلي.
Xapian
- ؟ سريع جدا وكامل (C ++)
- ؟ لا يوجد PIP قابل للتثبيت (احتياجات تجميع مستوى النظام)
- ؟ روابط Python والوثائق ليست سهلة الاستخدام
جينسيم
بينما يركز Gensim على نمذجة الموضوع ، يمكنك استخدام TfidfModel و SparseMatrixSimilarity للبحث عن النص. ومع ذلك ، فإن هذا لا يستخدم فهرس مقلوب (البحث الخطي) بحيث يكون له قابلية التوسع محدودة.
- ؟ ميزات فريدة مثل البحث التقريبي
- ؟ التركيز على نمذجة الموضوع ، لذلك لا توجد واجهات برمجة حرارية بديهية لابتلاع/البحث الكامل
- ؟ لا يدعم البحث عن الفهارس المقلوبة (في الغالب فحص كامل وتقريبي)
Peewee
PeeWee هو في الواقع ORM أكثر عمومية ولكنه يقدم تجريدات لاستخدام البحث النصية الكاملة على SQLite:
- ؟ دعم للبحث عن النص الكامل باستخدام العديد من الخلفية SQL (لا يوجد Elasticsearch)
- ؟ وظائف الترتيب المخصص والمحلل
- ؟ لا API متوافق مع Elasticsearch