ในการทำระบบค้นหาข้อมูลในภาษาไพทอน ภาษาไพทอนได้มีโมดูลสำหรับงานนี้จำนวนมากมาย หนึ่งในโมดูลยอดนิยมในการทำระบบค้นหาข้อมูล คือ โมดูล Whoosh
โมดูล Whoosh เป็นโมดูลสำหรับทำระบบค้นหาข้อมูลในภาษาไพทอน
- เขียนด้วยภาษาไพทอนทั้งหมด เป็น Pythonic
- สามารถจัดทำดัชนีและการค้นหาได้อย่างรวดเร็ว
- มีการใช้ algorithm ในการจัดลำดับและวิเคราะห์ข้อมูล ไม่ว่าจะเป็น scoring algorithm (เรียกใช้ BM25F), text analysis, storage, posting format
- รองรับภาษา query
- ใช้ License: Two-clause BSD license
- รองรับทั้ง Python 2 และ Python 3
pip install Whoosh
สามารถอ่านเอกสารได้ที่ http://pythonhosted.org/Whoosh/
การใช้งานเบื้องต้น
สร้างฐานข้อมูลดัชนีค้นหาและเพิ่มข้อมูลดัชนี
ให้ทำการสร้างโฟลเลอร์ searchdb ในโฟลเลอร์เดียวกันกับไฟล์ python
from whoosh.index import create_in
from whoosh.fields import *
# สร้างวัตถุ "Schema" สำหรับเก็บข้อความที่ต้องการค้นหา
# สามารถปรับแต่ง fields ค้นหาได้ตามที่ต้องการ เช่น "title", "domain", "path" , "content".
schema = Schema(title=TEXT(stored=True),domain=ID(stored=True),path=ID(stored=True),content=TEXT)
# สร้างดัชนีค้นหาและดัชนีค้นหาในโฟลเลอร์
ix = create_in("searchdb", schema, indexname="testindex")
writer = ix.writer()
# เพิ่มข้อมูลลงไปให้ครบตามที่กำหนด fields ค้นหาไว้
writer.add_document(title="กูเกิล", domain="www.google.com",path="/search/index", content="Web search 1")
writer.add_document(title="Bing", domain="www.bing.com",path="/search/index2", content="Web search 2")
writer.commit()
ทำการค้นหาข้อมูล "Bing" จาก fields ค้นหาที่ชื่อ title
from whoosh.qparser import QueryParser
import whoosh.index as index
ix = index.open_dir("searchdb", indexname="testindex")
searcher = ix.searcher()
query = QueryParser("title",ix.schema).parse("Bing")
results = searcher.search(query)
with ix.searcher() as searcher:
# ทำการค้นหาข้อมูล
results = searcher.search(query)
print(results[0])
input()
ผลลัพธ์
<Hit {'domain': 'www.bing.com', 'title': 'Bing', 'path': '/search/index2'}>
ค้นหาข้อมูลมากกว่าหนึ่ง fields และใช้ภาษา query
from whoosh.qparser import QueryParser, MultifieldParser
import whoosh.index as index
from whoosh.query import *
ix = index.open_dir("searchdb", indexname="testindex")
query = MultifieldParser(["title","domain", "path","content"], schema=ix.schema).parse("A OR bing")
with ix.searcher() as searcher:
# ทำการค้นหาข้อมูล
results = searcher.search(query)
print(results[0])
input()
ผลลัพธ์
<Hit {'domain': 'www.bing.com', 'title': 'Bing', 'path': '/search/index2'}>
อ่านเอกสารได้ที่ http://pythonhosted.org/Whoosh/
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
Tag [python] ยังเป็น tag อยู่เลยครับ
ตอบลบ