mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-09-01 13:13:10 +00:00
MINOR: User search should only look in name & displayName (#19121)
* MINOR: User search should only look in name & displayname * py_format * pyformat --------- Co-authored-by: Suman Maharana <sumanmaharana786@gmail.com>
This commit is contained in:
parent
91628b0d92
commit
a49aab7111
@ -13,6 +13,7 @@ Mixin class containing User specific methods
|
|||||||
|
|
||||||
To be used by OpenMetadata class
|
To be used by OpenMetadata class
|
||||||
"""
|
"""
|
||||||
|
import json
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from typing import Optional, Type
|
from typing import Optional, Type
|
||||||
|
|
||||||
@ -46,16 +47,29 @@ class OMetaUserMixin:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def name_search_query_es(entity: Type[T]) -> str:
|
def name_search_query_es(entity: Type[T], name: str, from_: int, size: int) -> str:
|
||||||
"""
|
"""
|
||||||
Allow for more flexible lookup following what the UI is doing when searching users.
|
Allow for more flexible lookup following what the UI is doing when searching users.
|
||||||
|
|
||||||
We don't want to stick to `q=name:{name}` since in case a user is named `random.user`
|
We don't want to stick to `q=name:{name}` since in case a user is named `random.user`
|
||||||
but looked as `Random User`, we want to find this match.
|
but looked as `Random User`, we want to find this match.
|
||||||
|
|
||||||
|
Search should only look in name and displayName fields and should not return bots.
|
||||||
"""
|
"""
|
||||||
|
query_filter = {
|
||||||
|
"query": {
|
||||||
|
"query_string": {
|
||||||
|
"query": f"{name} AND isBot:false",
|
||||||
|
"fields": ["name", "displayName"],
|
||||||
|
"default_operator": "AND",
|
||||||
|
"fuzziness": "AUTO",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
"/search/query?q={name} AND isBot:false&from={from_}&size={size}&index="
|
f"""/search/query?query_filter={json.dumps(query_filter)}"""
|
||||||
+ ES_INDEX_MAP[entity.__name__]
|
f"&from={from_}&size={size}&index=" + ES_INDEX_MAP[entity.__name__]
|
||||||
)
|
)
|
||||||
|
|
||||||
def _search_by_email(
|
def _search_by_email(
|
||||||
@ -103,8 +117,8 @@ class OMetaUserMixin:
|
|||||||
fields: Optional field list to pass to ES request
|
fields: Optional field list to pass to ES request
|
||||||
"""
|
"""
|
||||||
if name:
|
if name:
|
||||||
query_string = self.name_search_query_es(entity=entity).format(
|
query_string = self.name_search_query_es(
|
||||||
name=name, from_=from_count, size=size
|
entity=entity, name=name, from_=from_count, size=size
|
||||||
)
|
)
|
||||||
return self.get_entity_from_es(
|
return self.get_entity_from_es(
|
||||||
entity=entity, query_string=query_string, fields=fields
|
entity=entity, query_string=query_string, fields=fields
|
||||||
|
@ -62,7 +62,9 @@ class OMetaUserTest(TestCase):
|
|||||||
|
|
||||||
cls.user_1: User = cls.metadata.create_or_update(
|
cls.user_1: User = cls.metadata.create_or_update(
|
||||||
data=CreateUserRequest(
|
data=CreateUserRequest(
|
||||||
name="random.user.es", email="random.user.es@getcollate.io"
|
name="random.user.es",
|
||||||
|
email="random.user.es@getcollate.io",
|
||||||
|
description="test",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -198,3 +200,8 @@ class OMetaUserTest(TestCase):
|
|||||||
self.assertIsNone(
|
self.assertIsNone(
|
||||||
self.metadata.get_reference_by_name(name="Organization", is_owner=True)
|
self.metadata.get_reference_by_name(name="Organization", is_owner=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# description should not affect in search
|
||||||
|
self.assertIsNone(
|
||||||
|
self.metadata.get_reference_by_name(name="test", is_owner=True)
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user