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های قدرتمند جستجو و تحلیل داده را ایجاد کرد. این ساختار به خصوص برای پروژههایی مثل موتورهای جستجو، سیستمهای پیشنهاددهنده و داشبوردهای تحلیلی بسیار کاربردی است.