استفاده از Elasticsearch در FastAPI

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/06/26
  • تعداد بازدید: 1

FastAPI به عنوان یک فریم‌ورک مدرن و سریع برای توسعه API در Python به خوبی با Elasticsearch ترکیب می‌شود. با استفاده از کتابخانه elasticsearch-py می‌توان عملیات ذخیره، جستجو و مدیریت داده‌ها را در قالب API پیاده‌سازی کرد.

نصب وابستگی‌ها


pip install fastapi[all] elasticsearch

ایجاد اتصال به Elasticsearch


from fastapi import FastAPI
from elasticsearch import Elasticsearch

app = FastAPI()

# اتصال به Elasticsearch
es = Elasticsearch("http://localhost:9200")

@app.get("/")
def root():
    return {"message": "FastAPI with Elasticsearch"}

افزودن سند جدید


@app.post("/add-document/")
def add_document(doc_id: int, title: str, content: str):
    doc = {
        "title": title,
        "content": content
    }
    res = es.index(index="articles", id=doc_id, document=doc)
    return {"result": res["result"]}

جستجو در اسناد


@app.get("/search-documents/")
def search_documents(query: str):
    body = {
        "query": {
            "match": {
                "content": query
            }
        }
    }
    res = es.search(index="articles", body=body)
    results = [hit["_source"] for hit in res["hits"]["hits"]]
    return {"results": results}

حذف یک سند


@app.delete("/delete-document/{doc_id}")
def delete_document(doc_id: int):
    res = es.delete(index="articles", id=doc_id, ignore=[400, 404])
    return {"result": res.get("result", "not found")}

برای به‌روزرسانی یک سند در Elasticsearch از متد update استفاده می‌کنیم. در FastAPI می‌توان یک مسیر API تعریف کرد تا داده‌های موجود را اصلاح کند.

نمونه مسیر API برای آپدیت سند


@app.put("/update-document/{doc_id}")
def update_document(doc_id: int, title: str = None, content: str = None):
    # آماده‌سازی داده‌های قابل آپدیت
    update_fields = {}
    if title:
        update_fields["title"] = title
    if content:
        update_fields["content"] = content

    if not update_fields:
        return {"error": "هیچ فیلدی برای آپدیت ارائه نشده است."}

    res = es.update(
        index="articles",
        id=doc_id,
        doc=update_fields,
        ignore=[404]
    )

    return {"result": res.get("result", "not found")}

مثال استفاده

برای تغییر عنوان و محتوای سند با شناسه ۱:


PUT /update-document/1
{
  "title": "Updated Title",
  "content": "Updated content for Elasticsearch"
}

توضیحات

  • فیلدهایی که مقدار دارند، آپدیت می‌شوند و فیلدهای بدون مقدار دست نخورده باقی می‌مانند.
  • در صورت عدم وجود سند با شناسه مشخص، نتیجه not found بازگردانده می‌شود.

با این روش می‌توانید اسناد موجود را به‌صورت پویا و بدون حذف و اضافه مجدد، در Elasticsearch آپدیت کنید.

اجرای پروژه

fastapi dev --host=8.8.8.8 --port=8000

تست API

بعد از اجرا می‌توانید به آدرس http://127.0.0.1:8000/docs بروید و متدهای مختلف را تست کنید.

جمع‌بندی

با ترکیب FastAPI و Elasticsearch می‌توان APIهای قدرتمند جستجو و تحلیل داده را ایجاد کرد. این ساختار به خصوص برای پروژه‌هایی مثل موتورهای جستجو، سیستم‌های پیشنهاددهنده و داشبوردهای تحلیلی بسیار کاربردی است.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.