2 สิงหาคม 2558

Published สิงหาคม 02, 2558 by with 1 comment

ทำระบบค้นหาข้อมูลง่าย ๆ ด้วย Whoosh ในภาษาไพทอน

สวัสดีผู้อ่านทุกท่าน บทความนี้ผมจะพาผู้อ่านไปทำระบบค้นหาข้อมูลง่าย ๆ ด้วย Whoosh ในภาษาไพทอนกันครับ


ในการทำระบบค้นหาข้อมูลในภาษาไพทอน ภาษาไพทอนได้มีโมดูลสำหรับงานนี้จำนวนมากมาย หนึ่งในโมดูลยอดนิยมในการทำระบบค้นหาข้อมูล คือ โมดูล Whoosh

โมดูล Whoosh เป็นโมดูลสำหรับทำระบบค้นหาข้อมูลในภาษาไพทอน

  • เขียนด้วยภาษาไพทอนทั้งหมด เป็น Pythonic
  • สามารถจัดทำดัชนีและการค้นหาได้อย่างรวดเร็ว
  • มีการใช้ algorithm ในการจัดลำดับและวิเคราะห์ข้อมูล ไม่ว่าจะเป็น scoring algorithm (เรียกใช้ BM25F), text analysis, storage, posting format
  • รองรับภาษา query
  • ใช้ License: Two-clause BSD license
  • รองรับทั้ง Python 2 และ Python 3
สามารถติดตั้งได้โดยใช้คำสั่ง pip:
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/
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

1 ความคิดเห็น:

แสดงความคิดเห็นได้ครับ :)