locasticsearch
การค้นหาข้อความแบบเต็มเซิร์ฟเวอร์ใน Python
สถานะอยู่เฉยๆ :? -
LocasticSearch ให้การค้นหาข้อความแบบเต็มรูปแบบแบบไม่ใช้เซิร์ฟเวอร์ที่ขับเคลื่อนโดยความสามารถในการค้นหาข้อความแบบเต็ม SQLite แต่พยายามที่จะเข้ากันได้กับ (ชุดย่อยของ) Elasticsearch API
ด้วยวิธีนี้คุณสามารถพัฒนาสิ่งที่น่าสนใจในการค้นหาข้อความโดยไม่จำเป็นต้องตั้งค่าบริการและเปลี่ยนไปใช้ 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"])
นอกจากนี้เรายังเพิ่ม API ที่เรียบง่ายซึ่งสามารถแปลงเป็น Elasticsearch ได้
คุณสมบัติ
- ?% ท้องถิ่นไม่มีการจัดการเซิร์ฟเวอร์
- Python บริสุทธิ์ที่มีน้ำหนักเบาไม่มีการพึ่งพาภายนอก
- ⚡การค้นหาที่รวดเร็วเป็นพิเศษขอบคุณความสามารถในการค้นหาข้อความแบบเต็ม SQLite
- - ไม่มีการล็อคเข้าด้วยกันขอบคุณ API COMPATIBLITY กับลูกค้าอย่างเป็นทางการคุณสามารถเปลี่ยนไปใช้ ElasticSearch ได้อย่างราบรื่นสำหรับขนาดหรือมากกว่าโดยไม่ต้องเปลี่ยนรหัสของคุณ
ติดตั้ง
pip install locasticsearch
เพื่อใช้หรือไม่ใช้
คุณไม่ควรใช้ locasticsearch หาก:
- คุณกำลังปรับใช้แอปพลิเคชันที่ละเอียดอ่อนด้านความปลอดภัย รหัส LocasticSearch มีแนวโน้มที่จะโจมตี SQL ฉีด สิ่งนี้ควรปรับปรุงในการเผยแพร่ในอนาคต
- การค้นหาของคุณมีความซับซ้อนมากกว่าสิ่งที่คุณจะพบในการสอน Elasticsearch 5 นาที Elasticsearch มี API ขนาดใหญ่และไม่น่าเป็นไปได้มากที่เราสามารถสนับสนุนได้แม้กระทั่งส่วนใหญ่
- คุณเกลียดห้องสมุดบั๊กกี้ LocasticSearch เป็นโครงการที่ยังเด็กมากดังนั้นจึงรับประกันข้อบกพร่อง คุณสามารถตรวจสอบการทดสอบเพื่อดูว่าความต้องการของคุณครอบคลุมหรือไม่
คุณควรใช้ locasticsearch หาก:
- คุณไม่ต้องการนักเทียบท่าหรือบริการ Elasticsearch โดยใช้ทรัพยากรที่มีค่าในแล็ปท็อปของคุณ
- คุณต้องการการค้นหาข้อความพื้นฐานและ Elasticsearch เท่านั้น
- คุณต้องการการปรับใช้ที่ง่ายมากที่เกี่ยวข้องกับการติดตั้ง PIP เท่านั้น
- การใช้ Java จากโปรแกรม Python ทำให้คุณรู้สึกสกปรก
ขั้นตอนต่อไป
เปรียบเทียบกับห้องสมุดที่คล้ายกัน
ความคิดที่รวดเร็วเกี่ยวกับเครื่องมือที่มีอยู่อย่าลังเลที่จะเพิ่ม/แสดงความคิดเห็น:
หวือหวา
ห้องสมุดค้นหาข้อความ Pure Python ที่โดดเด่นที่สุด: FAR:
- - รองรับไฮไลต์เครื่องวิเคราะห์การขยายแบบสอบถามฟังก์ชั่นการจัดอันดับหลายอย่าง ...
- - ไม่ได้รับการดูแลเป็นเวลานานแม้ว่าอาจเห็นการฟื้นฟูที่ https://github.com/whoosh-community/whoosh
- - Pure Python ดังนั้นจึงไม่ปรับขนาดเช่นกัน (ยังเร็วพอสำหรับชุดข้อมูลขนาดเล็ก/ขนาดกลาง)
Elasticsearch
แชมป์ใหญ่ของการค้นหาข้อความเต็ม นี่คือสิ่งที่คุณควรใช้ในการผลิต:
- - คุณสมบัติมากมายในการรองรับกรณีการใช้งานใด ๆ
- - ทดสอบการต่อสู้ปรับขนาดได้นักแสดง
- - Non Python Native: ซับซ้อนมากขึ้นในการปรับใช้/รวมเข้ากับโครงการ Python เพื่อใช้งานง่าย
น่ารัก
นี่เป็นคำแนะนำที่ดีสำหรับการค้นหาข้อความแบบเต็มในท้องถิ่นหากคุณไม่สนใจเกี่ยวกับความเข้ากันได้ของ API การค้นหาแบบยืดหยุ่น
- - ง่ายต่อการตั้งค่าและใช้งาน:
pip install tantivy - - เครื่องยนต์ที่ใช้สนิมอย่างรวดเร็ว
- - DSL/Library Lock ในไม่มีการค้นหาแบบยืดหยุ่น API
Pyserini
แม้ว่าจะไม่ใช่ Python ที่บริสุทธิ์ แต่ Pyserini นั้นเป็นการประนีประนอมที่ดีหากคุณต้องการบางสิ่งบางอย่างในท้องถิ่นและปรับขนาดได้:
- - Acess to Lucene จากภายใน Python (ผ่าน Pyjnius Java Bridge)
- - การปรับใช้แบบไม่มีเซิร์ฟเวอร์ / ท้องถิ่น
- - DSL/Library Lock ใน
- - รันไทม์ Java พิเศษ
Django Haystack
Django Haystack จัดเตรียม API แบบครบวงจรที่ช่วยให้คุณสามารถเสียบแบ็คเอนด์การค้นหาที่แตกต่างกัน (เช่น Solr, Elasticsearch, Whoosh, Xapian ฯลฯ ) โดยไม่ต้องแก้ไขรหัสของคุณ:
- - คุณสมบัติมากมายเพิ่มไฮไลต์การเติมข้อความอัตโนมัติ (บางส่วนขึ้นอยู่กับแบ็กเอนด์)
- - ความเป็นไปได้ที่จะเปลี่ยนแบ็กเอนด์
- - DSL/Library Lock ใน
- - แม้จะมีการสนับสนุนแบ็กเอนด์หลายครั้ง แต่ Whaosh เป็นคนเดียวที่เป็นคนพื้นเมือง Python
Xapian
- - เร็วมากและเต็มรูปแบบ (C ++)
- - ไม่มีการติดตั้ง PIP (การรวบรวมระดับระบบต้องการ)
- - การผูก Python และเอกสารไม่ได้เป็นมิตรกับผู้ใช้
เครื่องถ่อมตัว
ในขณะที่ Gensim มุ่งเน้นไปที่การสร้างแบบจำลองหัวข้อคุณสามารถใช้ TfidfModel และ SparseMatrixSimilarity สำหรับการค้นหาข้อความ ที่กล่าวว่านี่ไม่ได้ใช้ดัชนีกลับด้าน (การค้นหาเชิงเส้น) ดังนั้นจึงมีความสามารถในการปรับขนาด จำกัด
- - คุณสมบัติที่เป็นเอกลักษณ์เช่นการค้นหาโดยประมาณ
- - โฟกัสอยู่ที่การสร้างแบบจำลองหัวข้อดังนั้นจึงไม่มี API ที่ใช้งานง่ายสำหรับการบริโภคข้อความเต็มรูปแบบ/การค้นหา
- - ไม่สนับสนุนการค้นหาดัชนีกลับหัว (ส่วนใหญ่สแกนเต็มและโดยประมาณ)
แอบดู
Peewee เป็น ORM ทั่วไปมากกว่า แต่เสนอนามธรรมเพื่อใช้การค้นหาข้อความแบบเต็มบน SQLite:
- - รองรับการค้นหาข้อความแบบเต็มโดยใช้แบ็กเอนด์ SQL หลายตัว (ไม่มี ElasticSearch แม้ว่า)
- - ฟังก์ชั่นการจัดอันดับและตัววิเคราะห์ที่กำหนดเอง
- - ไม่มี API ที่เข้ากันได้กับ ElasticSearch