اتصال به دیتابیس ElasticSearch در برنامه‌های Django


برای اتصال به دیتابیس ElasticSearch در برنامه‌های Django، در ابتدا باید ماژول مربوط به آن‌را با اجرای دستور زیر، نصب کنید:

کپی
pip install elasticsearch

سپس، در فایل settings.py، تنظیمات مربوط به دیتابیس را اضافه کنید:

کپی
 # other codes ...
ELASTICSEARCH_DSL = {
    'default': {
        'hosts': os.getenv("ELASTICSEARCH_URI"),
    },
}
# other codes ...

در ادامه، بایستی طبق مستندات تنظیم متغیرهای محیطی، متغیرهای مربوط به دیتابیس خود را، به برنامه، اضافه کنید؛ به عنوان مثال:

کپی
ELASTICSEARCH_URI=http://elastic:G4bqHLMHvZKMscUy8OhLomK1@bromo.liara.cloud:328

در نهایت، کافیست دستور زیر را اجرا کنید تا فایل requirements.txt به‌روز شود و نام ماژول مربوط به دیتابیس، در این فایل، قرار بگیرد:

کپی
pip freeze > requirements.txt

تمامی کارها انجام شده است و شما می‌توانید از دیتابیس خود استفاده کنید. به عنوان مثال، می‌توانید با اجرای دستور زیر، یک application جدید ایجاد کنید:

کپی
python manage.py startapp elasticsearch_app

سپس، این application جدید را به بخش INSTALLED_APPS در settings.py، اضافه کنید:

کپی
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'elasticsearch_app', # add this
]

در ادامه، در دایرکتوری elasticsearch_app، یک فایل جدید به نام elastic_model.py ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید:

کپی
from elasticsearch import Elasticsearch
from django.conf import settings

class ElasticModel:
    def __init__(self):
        self.client = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts'])
        self.index = 'test_index'

    def create_index(self):
        if not self.client.indices.exists(index=self.index):
            self.client.indices.create(index=self.index)

    def insert_data(self, data):
        self.client.index(index=self.index, document=data)

    def read_data(self):
        response = self.client.search(index=self.index, body={"query": {"match_all": {}}})
        return response['hits']['hits']

در ادامه، در فایل elasticsearch_app/views.py قطعه کد زیر را وارد کنید تا اتصال به دیتابیس، بررسی شود:

کپی
from django.http import JsonResponse
from .elastic_model import ElasticModel

def elasticsearch_insert_read(request):
    es_model = ElasticModel()
    es_model.create_index()
    
    # Insert data
    data = {
        'name': 'Sample Data',
        'description': 'This is a sample data entry for Elasticsearch.'
    }
    es_model.insert_data(data)
    
    # Read data
    results = es_model.read_data()
    
    return JsonResponse(results, safe=False)

سپس، بایستی در دایرکتوری elasticsearch_app، یک فایل به نام urls.py ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید:

کپی
from django.urls import path
from .views import elasticsearch_insert_read

urlpatterns = [
    path('', elasticsearch_insert_read, name='elasticsearch_insert_read'),
]

در نهایت، می‌توانید در فایل urls.py موجود در دایرکتوری اصلی پروژه، قطعه کد زیر را اضافه کنید:

کپی
from django.urls import include, path

urlpatterns = [
   
    path('elasticsearch/', include('elasticsearch_app.urls')),
]

اکنون می‌توانید برنامه‌تان را در لیارا مستقر کرده و در صفحه elasticsearch/ وضعیت اتصال به دیتابیس خود را بررسی کنید.