Skip to content

Commit

Permalink
#291 Make it possible to specify search on sub-field (not only on mai…
Browse files Browse the repository at this point in the history
…n field)
  • Loading branch information
barseghyanartur committed Jul 5, 2022
1 parent a5d195f commit 0abebe1
Showing 1 changed file with 25 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from copy import deepcopy

from elasticsearch_dsl.query import Q

from .base import BaseSearchQueryBackend
Expand Down Expand Up @@ -32,27 +34,43 @@ def construct_search(cls, request, view, search_backend):
if __len_values > 1:
field, value = __values
if field in view.search_fields:
# Initial kwargs for the match query
field_kwargs = {field: {'query': value}}
field_kwargs = {}
# In case if we deal with structure 2
if isinstance(view.search_fields, dict):
extra_field_kwargs = view.search_fields[field]
field_name = deepcopy(field)
extra_field_kwargs = deepcopy(view.search_fields[field])
if extra_field_kwargs:
field_kwargs[field].update(extra_field_kwargs)
if "field" in extra_field_kwargs:
field_name = extra_field_kwargs.pop("field")
# Initial kwargs for the match query
field_kwargs = {field_name: {"query": value}}
field_kwargs[field_name].update(extra_field_kwargs)

if not field_kwargs:
field_kwargs = {field: {"query": value}}

# The match query
__queries.append(
Q(cls.query_type, **field_kwargs)
)
else:
for field in view.search_fields:
# Initial kwargs for the match query
field_kwargs = {field: {'query': search_term}}
field_kwargs = {}

# In case if we deal with structure 2
if isinstance(view.search_fields, dict):
extra_field_kwargs = view.search_fields[field]
field_name = deepcopy(field)
extra_field_kwargs = deepcopy(view.search_fields[field])
if extra_field_kwargs:
field_kwargs[field].update(extra_field_kwargs)
if "field" in extra_field_kwargs:
field_name = extra_field_kwargs.pop("field")
# Initial kwargs for the match query
field_kwargs = {field_name: {"query": search_term}}
field_kwargs[field_name].update(extra_field_kwargs)

if not field_kwargs:
field_kwargs = {field: {"query": search_term}}

# The match query
__queries.append(
Expand Down

0 comments on commit 0abebe1

Please sign in to comment.