155 lines
4.7 KiB
Python
155 lines
4.7 KiB
Python
from django_elasticsearch_dsl_drf.compat import StringField, KeywordField
|
|
from elasticsearch_dsl import analyzer
|
|
from apps.authorization.models import UserRelations, Role
|
|
from apps.authentication.models import User, Organization
|
|
from django_elasticsearch_dsl.registries import registry
|
|
from django_elasticsearch_dsl import Document, fields
|
|
|
|
html_strip = analyzer(
|
|
'html_strip',
|
|
tokenizer="standard",
|
|
filter=["lowercase", "stop", "snowball"],
|
|
char_filter=["html_strip"]
|
|
)
|
|
|
|
|
|
@registry.register_document
|
|
class UserRelationDocument(Document):
|
|
"""Address Elasticsearch document."""
|
|
|
|
# In different parts of the code different fields are used. There are
|
|
# a couple of use cases: (1) more-like-this functionality, where `title`,
|
|
# `description` and `summary` fields are used, (2) filter and filtering
|
|
# functionality where all the fields are used.
|
|
|
|
user = fields.ObjectField(properties={
|
|
'username': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'mobile': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': KeywordField()
|
|
}
|
|
),
|
|
'national_code': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'first_name': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'last_name': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
})
|
|
organization = fields.ObjectField(properties={
|
|
'name': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'type': fields.ObjectField(properties={
|
|
'key': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
)
|
|
}),
|
|
'national_unique_id': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'field_of_activity': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'company_code': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'province': fields.ObjectField(properties={
|
|
'name': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
}),
|
|
'city': fields.ObjectField(properties={
|
|
'name': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
}),
|
|
'parent_organization': fields.ObjectField(properties={
|
|
'name': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
'unique_national_id': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
),
|
|
})
|
|
})
|
|
role = fields.ObjectField(properties={
|
|
'role_name': StringField(
|
|
analyzer=html_strip,
|
|
fields={
|
|
'raw': KeywordField(),
|
|
'suggest': fields.CompletionField()
|
|
}
|
|
)
|
|
})
|
|
|
|
class Index:
|
|
name = 'userrelations' # noqa
|
|
settings = {
|
|
'number_of_shards': 1,
|
|
'number_of_replicas': 1 # number of copies from data in document
|
|
}
|
|
|
|
class Django:
|
|
model = UserRelations
|
|
relates_models = [User, Organization, Role]
|