Locasticsearch
Pencarian teks lengkap tanpa server di Python
️ Status tidak aktif :? ?
Locasticsearch menyediakan pencarian teks lengkap tanpa server yang ditenagai oleh kemampuan pencarian teks lengkap SQLite tetapi mencoba untuk kompatibel dengan (subset dari) API Elasticsearch.
Dengan begitu Anda dapat dengan nyaman mengembangkan aplikasi pencarian teks Anda tanpa perlu mengatur layanan dan transisi dengan lancar ke Elasticsearch untuk skala atau lebih fitur tanpa mengubah kode Anda.
Yang mengatakan, jika Anda hanya melakukan operasi pencarian dasar dalam subset yang didukung oleh perpustakaan ini, dan tidak memiliki banyak dokumen (~ juta) yang akan membenarkan pergi untuk penyebaran cluster, Locasticsearch dapat menjadi alternatif yang lebih cepat dari Elasticsearch.
Memulai
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"])
Kami juga menambahkan API yang disederhanakan yang dapat dikonversi ke Elasticsearch.
Fitur
- ?% Lokal, tidak ada manajemen server
- Python murni ringan, tidak ada dependensi eksternal
- ⚡ Pencarian super cepat berkat kemampuan pencarian teks lengkap SQLite
- ? Tidak ada kunci. Berkat kompatibilitas API dengan klien resmi, Anda dapat dengan lancar beralih ke Elasticsearch untuk skala atau lebih fitur tanpa mengubah kode Anda.
Memasang
pip install locasticsearch
Untuk menggunakan atau tidak menggunakan
Anda tidak boleh menggunakan Locasticsearch jika:
- Anda menggunakan aplikasi yang sensitif terhadap keamanan. Kode Locasticsearch sangat rentan terhadap serangan injeksi SQL. Ini harus membaik dalam rilis di masa mendatang.
- Pencarian Anda lebih rumit daripada apa yang akan Anda temukan dalam tutorial Elasticsearch 5 menit. Elasticsearch memiliki API yang sangat besar dan sangat tidak mungkin bahwa kami dapat mendukung bahkan sebagian besar itu.
- Anda membenci perpustakaan buggy. Locasticsearch adalah proyek yang sangat muda sehingga bug dijamin. Anda dapat memeriksa tes untuk melihat apakah kebutuhan Anda tertutup.
Anda harus menggunakan Locasticsearch jika:
- Anda tidak ingin pelabuhan atau layanan Elasticsearch menggunakan sumber daya berharga di laptop Anda
- Anda hanya perlu pencarian teks dasar dan elasticsearch akan berlebihan
- Anda ingin penyebaran yang sangat mudah yang hanya melibatkan pemasangan pip
- Menggunakan java dari program Python membuat Anda merasa kotor
Langkah selanjutnya
Perbandingan dengan perpustakaan yang serupa
Beberapa pemikiran cepat tentang alat yang ada, jangan ragu untuk menambahkan/berkomentar:
suara mendesing
Perpustakaan Pencarian Teks Python yang paling lengkap sejauh ini:
- ? Sorotan mendukung, analisis, ekspansi kueri, beberapa fungsi peringkat, ...
- ? Tanpa lama untuk waktu yang lama mungkin melihat kebangkitan di https://github.com/whoosh-community/whoosh
- ? Python murni jadi tidak skala juga (masih cukup cepat untuk kumpulan data kecil/sedang)
Elasticsearch
Juara besar pencarian teks lengkap. Inilah yang harus Anda gunakan dalam produksi:
- ? Banyak fitur untuk mengakomodasi kasus penggunaan apa pun
- ? Pertempuran diuji, dapat diskalakan, performant
- ? Non Python Native: Lebih kompleks untuk digunakan/diintegrasikan dengan Proyek Python untuk kasus penggunaan yang mudah
tanttivy
Ini adalah rekomendasi yang baik untuk pencarian teks lengkap lokal jika Anda tidak peduli tentang kompatibilitas API pencarian elastis
- ? Mudah diatur dan digunakan:
pip install tantivy - ? Mesin berbasis karat cepat
- ? DSL/Library Lock In, No Elastic Search API
Pyserini
Meskipun bukan Python murni, Pyserini adalah kompromi yang baik jika Anda menginginkan sesuatu yang lokal dan dapat diskalakan:
- ? Acess to Lucene dari dalam Python (via Pyjnius Java Bridge)
- ? Penyebaran serverless / lokal
- ? DSL/Library Lock In
- ? Runtime Java ekstra
Django Haystack
Django Haystack menyediakan API terpadu yang memungkinkan Anda untuk mencolokkan backend pencarian yang berbeda (seperti Solr, Elasticsearch, Whoosh, Xapian, dll.) Tanpa harus memodifikasi kode Anda:
- ? Banyak fitur, peningkatan, sorotan, pelengkapan otomatis (beberapa backend tergantung)
- ? Kemungkinan untuk mengganti backends
- ? DSL/Library Lock In
- ? Meskipun mendukung beberapa backends, whoosh adalah satu -satunya yang asli Python.
xapian
- ? Fitur yang sangat cepat dan penuh (C ++)
- ? Tidak dapat diinstal (membutuhkan kompilasi level sistem)
- ? Binding Python dan dokumentasinya tidak ramah pengguna
Gensim
Sementara Gensim berfokus pada pemodelan topik, Anda dapat menggunakan TfidfModel dan SparseMatrixSimilarity untuk pencarian teks. Yang mengatakan ini tidak menggunakan indeks terbalik (pencarian linier) sehingga memiliki skalabilitas terbatas.
- ? Fitur unik seperti perkiraan pencarian
- ? Fokus adalah pada pemodelan topik, jadi tidak ada API intuitif untuk konsumsi/pencarian teks lengkap
- ? Tidak mendukung pencarian indeks terbalik (kebanyakan pemindaian penuh dan perkiraan)
katai
Peewee sebenarnya adalah ORM yang lebih umum tetapi menawarkan abstraksi untuk menggunakan pencarian teks lengkap di SQLite:
- ? Dukungan untuk pencarian teks lengkap menggunakan beberapa backend SQL (tidak ada elasticsearch)
- ? Fungsi Peringkat Kustom dan Penisal
- ? Tidak ada API yang kompatibel dengan elasticsearch