Skip to content

Commit

Permalink
OpenConceptLab/ocl_issues#649 | concept name search | hyphen is conve…
Browse files Browse the repository at this point in the history
…rted into underscore
  • Loading branch information
snyaggarwal committed Apr 26, 2021
1 parent e9b2171 commit 03de067
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
12 changes: 10 additions & 2 deletions core/common/views.py
Expand Up @@ -142,6 +142,7 @@ def get_exact_search_fields(self):

def get_search_string(self, lower=True):
search_str = self.request.query_params.dict().get(SEARCH_PARAM, '').strip()
search_str = search_str.replace('-', '_')
if lower:
search_str = search_str.lower()

Expand Down Expand Up @@ -340,6 +341,10 @@ def is_user_document(self):
from core.users.documents import UserProfileDocument
return self.document_model == UserProfileDocument

def is_concept_document(self):
from core.concepts.documents import ConceptDocument
return self.document_model == ConceptDocument

def is_owner_document_model(self):
from core.orgs.documents import OrganizationDocument
from core.users.documents import UserProfileDocument
Expand Down Expand Up @@ -448,13 +453,16 @@ def __search_results(self): # pylint: disable=too-many-branches,too-many-locals
def get_wildcard_search_criterion(self):
search_string = self.get_search_string()
wildcard_search_string = self.get_wildcard_search_string()
name_attr = 'name'
if self.is_concept_document():
name_attr = '_name'

return Q(
"wildcard", id=dict(value=search_string, boost=2)
) | Q(
"wildcard", name=dict(value=search_string, boost=5)
"wildcard", **{name_attr: dict(value=search_string, boost=5)}
) | Q(
"query_string", query=wildcard_search_string, fields=self.get_searchable_fields()
"query_string", query=wildcard_search_string
)

def get_search_results_qs(self):
Expand Down
9 changes: 8 additions & 1 deletion core/concepts/documents.py
Expand Up @@ -12,7 +12,7 @@ class Index:
settings = {'number_of_shards': 1, 'number_of_replicas': 0}

id = fields.KeywordField(attr='mnemonic', normalizer="lowercase")
name = fields.TextField(attr='display_name')
name = fields.TextField()
_name = fields.KeywordField(attr='display_name', normalizer='lowercase')
last_update = fields.DateField(attr='updated_at')
locale = fields.ListField(fields.KeywordField(attr='display_name'))
Expand All @@ -38,6 +38,13 @@ class Django:
'external_id',
]

@staticmethod
def prepare_name(instance):
name = instance.display_name
if name:
name = name.replace('-', '_')
return name

@staticmethod
def prepare_locale(instance):
return list(
Expand Down

0 comments on commit 03de067

Please sign in to comment.