class NewCollegeBasicInfoDocument(Document): name = fields.TextField(attr='college_name', fields={ 'suggest': fields.Completion(), }) city_name = fields.TextField(fields={ 'suggest': fields.Completion(), }) def prepare_city_name(self, instance): try: city_text = NewCollegeCollegeCities.objects.get(id=instance.city) except NewCollegeCollegeCities.DoesNotExist: city_text = None if city_text: return city_text.city return "default" class Django: model = NewCollegeBasicInfo fields = [ 'id', 'college_name', ] queryset_pagination = 50
class ForumPostDocument(Document): forum_comments = fields.NestedField( properties={ 'author': fields.TextField( attr="author", fields={ 'raw': fields.TextField(analyzer=html_strip), 'suggest': fields.Completion(analyzer=sugg_analyzer) }), 'text': fields.TextField( attr="text", fields={ 'raw': fields.TextField(analyzer=html_strip), 'suggest': fields.Completion(analyzer=sugg_analyzer) }) }) class Index: # Name of the Elasticsearch index name = 'forum_posts_index' # See Elasticsearch Indices API reference for available settings settings = {'number_of_shards': 1, 'number_of_replicas': 0} class Django: """ I no longer have an autocomplete defined as the amount of requests goes through the roof. """ # text = fields.TextField( # attr='text', # fields={ # 'raw': fields.TextField(analyzer=html_strip), # 'suggest': fields.Completion(analyzer=sugg_analyzer), # } # ) # title = fields.TextField( # attr='title', # fields={ # 'raw': fields.TextField(analyzer=html_strip), # 'suggest': fields.Completion(analyzer=sugg_analyzer), # } # ) # author = fields.TextField( # attr='title', # fields={ # 'raw': fields.TextField(analyzer=html_strip), # 'suggest': fields.Completion(analyzer=sugg_analyzer), # }) model = ForumPost fields = [ 'title', 'text', 'category', 'author', ]
class ProfilDocument(Document): name = fields.TextField(fielddata=True, attr='lastname', fields={ 'suggest': fields.Completion(), }) works = fields.NestedField(properties={ "job": fields.TextField(), "title": fields.TextField() }) promo = fields.TextField(attr="promo") links = fields.NestedField(properties={ "url": fields.TextField(), "text": fields.TextField() }) public_url = fields.TextField(attr="public_url") class Index: name = 'profils' settings = {"number_of_shards": 1, "number_of_replicas": 0} class Django(object): model = Profil fields = [ "id", "firstname", "lastname", "acceptSponsor", "email", "department", "cp", "cursus", "mobile", "photo", "address", "town", "degree_year", "dtLastUpdate" ] def get_queryset(self): return super().get_queryset().select_related('extrauser')
class CarDocument(DocType): name = fields.TextField(attr='name', fields={ 'suggest': fields.Completion(), }) manufacturer = fields.ObjectField(properties={ 'name': fields.TextField(), 'country_code': fields.TextField(), }) auction_title = fields.TextField(attr='get_auction_title') points = fields.IntegerField() def prepare_points(self, instance): if instance.color == 'silver': return 2 return 1 class Meta: model = Car fields = [ 'id', 'color', 'description', 'type', ] related_models = [Manufacturer] def get_queryset(self): return super().get_queryset().select_related('manufacturer') def get_instances_from_related(self, related_instance): if isinstance(related_instance, Manufacturer): return related_instance.car_set.all()
class ProductDocument(Document): name = fields.TextField( attr='name', fields={ 'suggest': fields.Completion(), } ) url = fields.TextField(attr='get_absolute_url') class Django: model = Product fields = [ 'id', 'thumbnail', ] def get_queryset(self): return super().get_queryset()
class IncidentDocument(DocType): title = fields.StringField(attr='incident_title', fields={ 'raw': fields.StringField(analyzer='keyword'), 'suggest': fields.Completion(), }) description = fields.StringField( attr='description', fields={ 'raw': fields.StringField(analyzer='keyword'), }) class Meta: model = Incident fields = ['id', 'incident_title', 'description']
class CourseDocument(DocType): title = fields.StringField( attr='course_title', fields={ 'raw': fields.StringField(analyzer='keyword'), 'suggest': fields.Completion(), } ) course_level = fields.StringField( attr='level', fields={ 'raw': fields.StringField(analyzer='keyword'), } ) class Meta: model = Course fields = [ 'id', 'course_title', 'level' ]
class Index: title = fields.TextField(attr='name', fields={ 'suggest': fields.Completion(), })
class EmployeeDocument(Document): first_name = fields.TextField(attr='first_name', analyzer=trigram_analyzer, fields={ 'suggest': fields.Completion(), }) middle_name = fields.TextField(attr='middle_name', analyzer=trigram_analyzer, fields={ 'suggest': fields.Completion(), }) last_name = fields.TextField(attr='last_name', analyzer=trigram_analyzer, fields={ 'suggest': fields.Completion(), }) work_email = fields.TextField(attr='work_email', analyzer=email_analyzer, fields={ 'suggest': fields.Completion(), }) skills = fields.TextField(attr='skills', analyzer=trigram_analyzer, fields={ 'suggest': fields.Completion(), }) employee_id = fields.TextField(attr='employee_id', analyzer=trigram_analyzer, fields={ 'suggest': fields.Completion(), }) position = fields.TextField() work_country_code = fields.TextField() id = fields.KeywordField() class Index: name = 'employee' doc_type = '_doc' class Django: model = Employee @staticmethod def default_search_fields_full_text(): """ Default searchable fields :return: tuple """ default_search_fields = ("first_name", "middle_name", "last_name", "work_email", "employee_id", "position", "work_country_code") return default_search_fields def as_dict(self): """ Convert the index data to dictionary :return: """ result = dict() _fields = self.default_search_fields_full_text() for _field in _fields: result[_field] = getattr(self, _field) result['id'] = getattr(self, "id") return result