2 สิงหาคม 2558

Published 8/02/2558 by with 0 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

[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()
[/python]

ทำการค้นหาข้อมูล "Bing" จาก fields ค้นหาที่ชื่อ title

[python]
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()
[/python]

ผลลัพธ์

[python]<Hit {'domain': 'www.bing.com', 'title': 'Bing', 'path': '/search/index2'}>[/python]

ค้นหาข้อมูลมากกว่าหนึ่ง fields และใช้ภาษา query

[python]
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()
[/python]

ผลลัพธ์

[python]<Hit {'domain': 'www.bing.com', 'title': 'Bing', 'path': '/search/index2'}>[/python]

อ่านเอกสารได้ที่ http://pythonhosted.org/Whoosh/
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

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

แสดงความคิดเห็น

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