Elastic: include exact searches on email address

This commit is contained in:
Sybren A. Stüvel 2018-01-09 16:16:38 +01:00
parent 6e40b9a44a
commit 4fdcd2a343
2 changed files with 6 additions and 0 deletions

View File

@ -53,6 +53,7 @@ class User(es.DocType):
fielddata=True, fielddata=True,
analyzer=autocomplete, analyzer=autocomplete,
) )
email_exact = es.Keyword()
class Meta: class Meta:
index = 'users' index = 'users'
@ -131,6 +132,8 @@ def create_doc_from_user_data(user_to_index: dict) -> User:
doc.roles = list(map(str, user_to_index['roles'])) doc.roles = list(map(str, user_to_index['roles']))
doc.groups = list(map(str, user_to_index['groups'])) doc.groups = list(map(str, user_to_index['groups']))
doc.email = user_to_index['email'] doc.email = user_to_index['email']
doc.email_exact = user_to_index['email']
return doc return doc

View File

@ -123,6 +123,9 @@ def _common_user_search(query: str) -> (typing.List[Query], typing.List[Query]):
Q('match', email=query), Q('match', email=query),
] ]
if '@' in query:
should.append(Q('term', email_exact=query))
return [], should return [], should