first base of project-changed apps: Herd-livestock-tag-log-elasticsearch-

This commit is contained in:
2025-05-24 15:01:55 +03:30
parent eab40af15d
commit 90a46e493c
129 changed files with 3844 additions and 187 deletions

View File

@@ -1,53 +1,53 @@
from apps.authentication.api.v1.serializers.serializer import UserSerializer
from rest_framework.pagination import LimitOffsetPagination
from rest_framework.viewsets import ModelViewSet, ViewSet
from apps.authentication.documents import UserDocument
from rest_framework.response import Response
from django.http.response import HttpResponse
from apps.authentication.models import User
from rest_framework.views import APIView
from elasticsearch_dsl.query import Q
import abc
class PaginatedElasticSearchApiView(APIView, LimitOffsetPagination):
"""Base ApiView Class for elasticsearch views with pagination
Other ApiView classes should inherit from this class"""
serializer_class = None
document_class = None
@abc.abstractmethod
def generate_q_expression(self, query):
"""This method should be overridden
and return a Q() expression."""
def get(self, request, query):
try:
q = self.generate_q_expression(query)
search = self.document_class.search().query(q)
response = search.execute()
print(f"Found {response.hits.total.value} hit(s) for query: '{query}'")
results = self.paginate_queryset(response, request, view=self) # noqa
serializer = self.serializer_class(results, many=True)
return self.get_paginated_response(serializer.data)
except Exception as e:
return HttpResponse(e, status=500)
class SearchUsersApiView(PaginatedElasticSearchApiView): # noqa
"""Search in Users"""
serializer_class = UserSerializer
document_class = UserDocument
def generate_q_expression(self, query):
return Q(
'multi_match',
query=query,
fields=[
'username',
'mobile'
], fuzziness='auto'
)
# from apps.authentication.api.v1.serializers.serializer import UserSerializer
# from rest_framework.pagination import LimitOffsetPagination
# from rest_framework.viewsets import ModelViewSet, ViewSet
# from apps.authentication.document import UserDocument
# from rest_framework.response import Response
# from django.http.response import HttpResponse
# from apps.authentication.models import User
# from rest_framework.views import APIView
# from elasticsearch_dsl.query import Q
# import abc
#
#
# class PaginatedElasticSearchApiView(APIView, LimitOffsetPagination):
# """Base ApiView Class for elasticsearch views with pagination,
# Other ApiView classes should inherit from this class"""
# serializer_class = None
# document_class = None
#
# @abc.abstractmethod
# def generate_q_expression(self, query):
# """This method should be overridden
# and return a Q() expression."""
#
# def get(self, request, query):
# try:
# q = self.generate_q_expression(query)
# search = self.document_class.search().query(q)
# response = search.execute()
#
# print(f"Found {response.hits.total.value} hit(s) for query: '{query}'")
#
# results = self.paginate_queryset(response, request, view=self) # noqa
# serializer = self.serializer_class(results, many=True)
# return self.get_paginated_response(serializer.data)
# except Exception as e:
# return HttpResponse(e, status=500)
#
#
# class SearchUsersApiView(PaginatedElasticSearchApiView): # noqa
# """Search in Users"""
#
# serializer_class = UserSerializer
# document_class = UserDocument
#
# def generate_q_expression(self, query):
# return Q(
# 'multi_match',
# query=query,
# fields=[
# 'username',
# 'mobile'
# ], fuzziness='auto'
# )