class UserDocument(DocType):
            """For testing purposes."""

            id = fields.IntegerField(attr='id')

            username = StringField(fields={
                'raw': KeywordField(),
                'suggest': fields.CompletionField(),
            })

            first_name = StringField(fields={
                'raw': KeywordField(),
                'suggest': fields.CompletionField(),
            })

            last_name = StringField(fields={
                'raw': KeywordField(),
                'suggest': fields.CompletionField(),
            })

            email = StringField(fields={
                'raw': KeywordField(),
            })

            is_staff = fields.BooleanField()

            is_active = fields.BooleanField()

            date_joined = fields.DateField()

            class Meta(object):
                """Meta options."""

                model = User  # The model associate with this DocType
class CompanyDocument(DocType):
    # ID
    id = fields.IntegerField(attr='id')
    avatar = fields.TextField()
    slug = fields.StringField()
    name = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })

    about = fields.TextField()
    headquarter = fields.TextField()
    is_address_public = fields.BooleanField()
    website = fields.StringField()
    since = fields.StringField()
    size_from = fields.IntegerField()
    size_to = fields.IntegerField()
    creator = fields.ObjectField(attr='create_field_indexing',
                                 properties={'id': fields.IntegerField()})
    tags = fields.ObjectField(attr='tag_field_indexing',
                              properties={
                                  'id': fields.IntegerField(),
                                  'name': fields.StringField()
                              })

    class Django:
        model = Company
class MemberDocument(Document):
    """Member Elasticsearch document."""
    id = fields.IntegerField(attr='id')
    full_name = StringField(analyzer=html_strip,
                            fields={
                                'raw': KeywordField(),
                                'suggest': fields.CompletionField(),
                            })
    birthday = fields.DateField()
    roles = fields.NestedField(
        properties={
            'title':
            fields.TextField(analyzer=html_strip,
                             attr='role',
                             fields={
                                 'raw': KeywordField(),
                             }),
        })
    member_url = fields.TextField(attr='get_absolute_url')
    image = fields.FileField(attr="image")

    class Django(object):
        """Inner nested class Django."""

        model = Members  # The model associate with this Document
class AuthorDocument(DocType):
    """Author Elasticsearch document."""

    id = fields.IntegerField(attr='id')

    name = StringField(fields={
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),
    })

    salutation = StringField(fields={
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),
    })

    email = StringField(fields={
        'raw': KeywordField(),
    })

    birth_date = fields.DateField()

    biography = StringField()

    phone_number = StringField()

    website = StringField()

    headshot = StringField(attr='headshot_indexing')

    class Meta(object):
        """Meta options."""

        model = Author  # The model associate with this DocType
class AuthorDocument(Document):
    """Author Elasticsearch document."""

    id = fields.IntegerField(attr='id')

    name = StringField(
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
            'edge_ngram_completion': StringField(
                analyzer=edge_ngram_completion
            ),
        }
    )

    salutation = StringField(
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
            'edge_ngram_completion': StringField(
                analyzer=edge_ngram_completion
            ),
        }
    )

    email = StringField(
        fields={
            'raw': KeywordField(),
        }
    )

    birth_date = fields.DateField()

    biography = StringField()

    phone_number = StringField()

    website = StringField()

    headshot = StringField(attr='headshot_indexing')

    class Django(object):
        model = Author  # The model associate with this Document

    class Meta(object):
        parallel_indexing = True
Esempio n. 6
0
class SkillDocument(Document):
    """Skill Elasticsearch document."""

    id = StringField(
        attr="id",
        analyzer=html_strip,
    )

    name = StringField(
        fields={
            "raw": KeywordField(),
            "suggest": fields.CompletionField(),
        },
    )
    # Date created
    created = fields.DateField()

    class Django(object):
        model = Skill  # The model associate with this Document

    class Meta(object):
        parallel_indexing = True
Esempio n. 7
0
class CollectionDocument(Document):
    """Collection Elasticsearch document."""
    id = fields.IntegerField(attr='id')
    title = StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        })
    collection_url = fields.TextField(attr='get_absolute_url')
    image = fields.FileField(attr="image")

    class Django(object):
        """Inner nested class Django."""
        model = Collection  # The model associate with this Document
Esempio n. 8
0
class SectorDocument(Document):
    """Secto Elasticsearch document."""

    id = StringField(
        attr="id",
        analyzer=html_strip,
    )

    __name_fields = {
        "raw": KeywordField(),
        "suggest": fields.CompletionField(),
        "edge_ngram_completion": StringField(analyzer=edge_ngram_completion),
        "mlt": StringField(analyzer="english"),
    }

    name = StringField(analyzer=html_strip, fields=__name_fields)
    # Date created
    created = fields.DateField()

    class Django(object):
        model = Sector  # The model associate with this Document

    class Meta(object):
        parallel_indexing = True
Esempio n. 9
0
class MovieDocument(Document):
    """Movie Elasticsearch document."""

    id = fields.IntegerField(attr='id')
    title = StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        })
    world_premiere = fields.DateField()
    country = StringField(analyzer=html_strip,
                          fields={
                              'raw': KeywordField(),
                          })
    rf_premiere = fields.DateField()
    categories = fields.NestedField(
        properties={
            'title':
            fields.TextField(analyzer=html_strip,
                             fields={
                                 'raw': KeywordField(),
                             }),
        })
    rating_kp = fields.FloatField()
    rating_imdb = fields.FloatField()
    directors = fields.NestedField(
        properties={
            'full_name': fields.TextField(analyzer=html_strip),
            'id': fields.IntegerField(),
        })
    image = fields.FileField(attr="poster")
    movie_url = fields.TextField(attr='get_absolute_url')

    class Django(object):
        """Inner nested class Django."""
        model = Movies  # The model associate with this Document
Esempio n. 10
0
class JobDocument(DocType):
    # ID
    id = fields.IntegerField(attr='id')
    title = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })
    description = fields.TextField()
    have_daily_perks = fields.BooleanField()
    daily_perks_budget = fields.DoubleField()
    have_transportation = fields.BooleanField()
    transportation_budget = fields.DoubleField()
    have_meal = fields.BooleanField()
    meal_budget = fields.DoubleField()
    have_space_rest = fields.BooleanField()
    space_rest_budget = fields.DoubleField()
    is_male = fields.BooleanField()
    is_female = fields.BooleanField()
    age = fields.IntegerField()
    hide_company = fields.BooleanField()
    latitude = fields.GeoPointField()
    longitude = fields.GeoPointField()
    slug = fields.StringField()
    publish_date = fields.DateField()

    tags = fields.ObjectField(attr='tag_field_indexing',
                              properties={
                                  'id': fields.IntegerField(),
                                  'name': fields.StringField()
                              })

    company = fields.ObjectField(attr='company_indexing',
                                 properties={
                                     'name': fields.StringField(),
                                     'avatar': fields.StringField(),
                                     'slug': fields.StringField(),
                                     'pk': fields.IntegerField()
                                 })

    class Django:
        model = Job
class PublisherDocument(DocType):
    """Publisher Elasticsearch document."""

    id = fields.IntegerField(attr='id')

    name = StringField(fields={
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),
    })

    info = StringField()

    address = StringField(fields={'raw': KeywordField()})

    city = StringField(fields={
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),
    })

    state_province = StringField(fields={
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),
    })

    country = StringField(fields={
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),
    })

    website = StringField()

    # Location
    location = fields.GeoPointField(attr='location_field_indexing')

    class Meta(object):
        """Meta options."""

        model = Publisher  # The model associate with this DocType
class LocationDocument(DocType):
    """
    Location document.
    """
    full = fields.StringField(
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
            "suggest": fields.CompletionField(),
            "context": fields.CompletionField(
                contexts=[
                    {
                        "name": "category",
                        "type": "category",
                        "path": "category.raw",
                    },
                    {
                        "name": "occupied",
                        "type": "category",
                        "path": "occupied.raw",
                    },
                ]
            ),
            # edge_ngram_completion
            "q": StringField(
                analyzer=edge_ngram_completion
                ),
        }
    )
    partial = fields.StringField(
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
            "suggest": fields.CompletionField(),
            "context": fields.CompletionField(
                contexts=[
                    {
                        "name": "category",
                        "type": "category",
                        "path": "category.raw",
                    },
                    {
                        "name": "occupied",
                        "type": "category",
                        "path": "occupied.raw",
                    },
                ]
            ),
            # edge_ngram_completion
            "q": StringField(
                analyzer=edge_ngram_completion
                ),
        }
    )
    postcode = fields.StringField(
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
            "suggest": fields.CompletionField(),
            "context": fields.CompletionField(
                contexts=[
                    {
                        "name": "category",
                        "type": "category",
                        "path": "category.raw",
                    },
                    {
                        "name": "occupied",
                        "type": "category",
                        "path": "occupied.raw",
                    },
                ]
            ),
        }
    )
    number = fields.StringField(
        attr="address_no",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    address = fields.StringField(
        attr="address_street",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    town = fields.StringField(
        attr="address_town",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    authority = fields.StringField(
        attr="authority_name",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    # URL fields /geocode/slug
    geocode = fields.StringField(
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    slug = fields.StringField(
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    # Filter fields
    category = fields.StringField(
        attr="group",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    occupied = fields.StringField(
        attr="occupation_status_text",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    size = fields.FloatField(attr="floor_area")
    staff = fields.FloatField(attr="employee_count")
    rent = fields.FloatField(attr="rental_valuation")
    revenue = fields.FloatField(attr="revenue")
    coordinates = fields.GeoPointField(attr="location_field_indexing")

    class Meta(object):
        """Meta options."""

        model = Location  # The model associate with this DocType
        parallel_indexing = True
        queryset_pagination = 50  # This will split the queryset
Esempio n. 13
0
class PublisherDocument(Document):
    """Publisher Elasticsearch document."""

    id = fields.IntegerField(attr='id')

    name = StringField(
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
            'edge_ngram_completion': StringField(
                analyzer=edge_ngram_completion
            ),
        }
    )

    info = StringField()

    address = StringField(
        fields={
            'raw': KeywordField()
        }
    )

    city = StringField(
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
            'edge_ngram_completion': StringField(
                analyzer=edge_ngram_completion
            ),
        }
    )

    state_province = StringField(
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
            'edge_ngram_completion': StringField(
                analyzer=edge_ngram_completion
            ),
        }
    )

    country = StringField(
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
            'edge_ngram_completion': StringField(
                analyzer=edge_ngram_completion
            ),
        }
    )

    website = StringField()

    # Location
    location = fields.GeoPointField(attr='location_field_indexing')

    # Geo-shape fields
    location_point = fields.GeoShapeField(strategy='recursive',
                                          attr='location_point_indexing')
    location_circle = fields.GeoShapeField(strategy='recursive',
                                           attr='location_circle_indexing')

    class Django(object):
        model = Publisher  # The model associate with this Document

    class Meta:
        parallel_indexing = True
Esempio n. 14
0
class EnterpriseDocument(Document):
    """Enterprise Elasticsearch document."""

    name = StringField(
        analyzer=custom_analyzer,
        fields={
            "raw": KeywordField(),
            "mlt": StringField(analyzer="english"),
            "suggest": fields.CompletionField(),
        },
    )

    description = StringField(
        analyzer=custom_analyzer,
        fields={
            "raw": KeywordField(),
            "mlt": StringField(analyzer="english"),
        },
    )

    summary = StringField(
        analyzer=custom_analyzer,
        fields={
            "raw": KeywordField(),
            "mlt": StringField(analyzer="english"),
        },
    )

    # Publication date
    created = fields.DateField()

    # Tags
    skills = StringField(attr="skills_indexing", multi=True)
    skills_en = StringField(attr="skills_en_indexing", multi=True)
    skills_fr = StringField(attr="skills_fr_indexing", multi=True)
    # Tags
    sectors = StringField(attr="sectors_indexing", multi=True)
    sectors_en = StringField(attr="sectors_en_indexing", multi=True)
    sectors_fr = StringField(attr="sectors_fr_indexing", multi=True)

    # class Index:
    #     name = 'dev_enterprise'
    #     # See Elasticsearch Indices API reference for available settings
    #     settings = {'max_result_window': 500000,}
    class Django(object):
        model = Enterprise  # The model associate with this Document

    class Meta(object):
        parallel_indexing = True
        queryset_pagination = 500  # This will split the queryset
        #                           # into parts while indexing

    def prepare_summary(self, instance):
        """Prepare summary."""
        return instance.summary[:32766] if instance.summary else None
Esempio n. 15
0
class SportDocument(Document):
    labels = fields.NestedField(properties={"text": StringField()})

    class Django:
        model = Sport
        fields = ["id", "name"]
Esempio n. 16
0
class CityDocument(Document):
    clubs = fields.NestedField(properties={"name": StringField()})

    class Django:
        model = City
        fields = ["id", "name", "region"]
class LocationDocument(DocType):
    """
    Location document.
    """
    # Full fields
    __full_fields = {
            "raw": KeywordField(),
            # edge_ngram_completion
            "q": StringField(
                analyzer=edge_ngram_completion
            ),
        }

    if ELASTICSEARCH_GTE_5_0:
        __full_fields.update(
            {
                "suggest": fields.CompletionField(),
                "context": fields.CompletionField(
                    contexts=[
                        {
                            "name": "category",
                            "type": "category",
                            "path": "category.raw",
                        },
                        {
                            "name": "occupied",
                            "type": "category",
                            "path": "occupied.raw",
                        },
                    ]
                ),

            }
        )

    full = StringField(
        analyzer=html_strip,
        fields=__full_fields
    )

    # Partial fields
    __partial_fields = {
        "raw": KeywordField(),
        # edge_ngram_completion
        "q": StringField(
            analyzer=edge_ngram_completion
            ),
    }
    if ELASTICSEARCH_GTE_5_0:
        __partial_fields.update(
            {
                "suggest": fields.CompletionField(),
                "context": fields.CompletionField(
                    contexts=[
                        {
                            "name": "category",
                            "type": "category",
                            "path": "category.raw",
                        },
                        {
                            "name": "occupied",
                            "type": "category",
                            "path": "occupied.raw",
                        },
                    ]
                ),
            }
        )
    partial = StringField(
        analyzer=html_strip,
        fields=__partial_fields
    )

    # Postcode
    __postcode_fields = {
        "raw": KeywordField(),
    }
    if ELASTICSEARCH_GTE_5_0:
        __postcode_fields.update(
            {
                "suggest": fields.CompletionField(),
                "context": fields.CompletionField(
                    contexts=[
                        {
                            "name": "category",
                            "type": "category",
                            "path": "category.raw",
                        },
                        {
                            "name": "occupied",
                            "type": "category",
                            "path": "occupied.raw",
                        },
                    ]
                ),
            }
        )
    postcode = StringField(
        analyzer=html_strip,
        fields=__postcode_fields
    )

    # Number
    number = StringField(
        attr="address_no",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )

    # Address
    address = StringField(
        attr="address_street",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )

    # Town
    town = StringField(
        attr="address_town",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )

    # Authority
    authority = StringField(
        attr="authority_name",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )

    # URL fields /geocode/slug
    geocode = StringField(
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )

    # Slug
    slug = StringField(
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )

    # ********************* Filter fields **********************
    # Category
    category = StringField(
        attr="group",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )

    # Occupied
    occupied = StringField(
        attr="occupation_status_text",
        analyzer=html_strip,
        fields={
            "raw": KeywordField(),
        }
    )
    size = fields.FloatField(attr="floor_area")
    staff = fields.FloatField(attr="employee_count")
    rent = fields.FloatField(attr="rental_valuation")
    revenue = fields.FloatField(attr="revenue")
    coordinates = fields.GeoPointField(attr="location_field_indexing")

    class Meta(object):
        """Meta options."""

        model = Location  # The model associate with this DocType
        parallel_indexing = True
        queryset_pagination = 50  # This will split the queryset
Esempio n. 18
0
class BookDocument(DocType):
    """Book 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) search and filtering
    # functionality where all of the fields are used.

    # ID
    id = fields.IntegerField(attr='id')

    # ********************************************************************
    # *********************** Main data fields for search ****************
    # ********************************************************************
    __title_fields = {
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),
        'edge_ngram_completion': StringField(analyzer=edge_ngram_completion),
        'mlt': StringField(analyzer='english'),
    }

    if ELASTICSEARCH_GTE_5_0:
        __title_fields.update({
            'suggest_context':
            fields.CompletionField(contexts=[
                {
                    "name": "tag",
                    "type": "category",
                    "path": "tags.raw",
                },
                {
                    "name": "state",
                    "type": "category",
                    "path": "state.raw",
                },
                {
                    "name": "publisher",
                    "type": "category",
                    "path": "publisher.raw",
                },
            ]),
        })

    title = StringField(analyzer=html_strip, fields=__title_fields)

    description = StringField(analyzer=html_strip,
                              fields={
                                  'raw': KeywordField(),
                                  'mlt': StringField(analyzer='english'),
                              })

    summary = StringField(analyzer=html_strip,
                          fields={
                              'raw': KeywordField(),
                              'mlt': StringField(analyzer='english'),
                          })

    # ********************************************************************
    # ********** Additional fields for search and filtering **************
    # ********************************************************************

    authors = fields.ListField(
        StringField(analyzer=html_strip, fields={
            'raw': KeywordField(),
        }))

    # Publisher
    publisher = StringField(attr='publisher_indexing',
                            analyzer=html_strip,
                            fields={
                                'raw': KeywordField(),
                                'suggest': fields.CompletionField(),
                            })

    # Publication date
    publication_date = fields.DateField()

    # State
    state = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })

    # ISBN
    isbn = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })

    # Price
    price = fields.FloatField()

    # Pages
    pages = fields.IntegerField()

    # Stock count
    stock_count = fields.IntegerField()

    # Tags
    tags = StringField(attr='tags_indexing',
                       analyzer=html_strip,
                       fields={
                           'raw': KeywordField(multi=True),
                           'suggest': fields.CompletionField(multi=True),
                       },
                       multi=True)

    # Date created
    created = fields.DateField()

    null_field = StringField(attr='null_field_indexing')

    class Meta(object):
        """Meta options."""

        model = Book  # The model associate with this DocType
        parallel_indexing = True

    def prepare_summary(self, instance):
        """Prepare summary."""
        return instance.summary[:32766]

    def prepare_authors(self, instance):
        """Prepare authors."""
        return [author.name for author in instance.authors.all()]
Esempio n. 19
0
class ProfileDocument(DocType):
    # ID
    id = fields.IntegerField(attr='id')

    # ********************************************************************
    # *********************** Main data fields for search ****************
    # ********************************************************************

    gender = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })

    location = StringField(analyzer=html_strip, fields={'raw': KeywordField()})
    avatar = fields.TextField()
    about = fields.TextField()
    phone = fields.StringField()
    slug = fields.StringField()
    # age = fields.IntegerField()

    height = fields.ObjectField(attr='height_field_indexing',
                                properties={
                                    'name': StringField(analyzer=html_strip),
                                    'id': fields.IntegerField()
                                })

    weight = fields.ObjectField(attr='weight_field_indexing',
                                properties={
                                    'name': StringField(analyzer=html_strip),
                                    'id': fields.IntegerField()
                                })

    build = fields.ObjectField(attr='build_field_indexing',
                               properties={
                                   'name': StringField(analyzer=html_strip),
                                   'id': fields.IntegerField()
                               })

    hair = fields.ObjectField(attr='hair_field_indexing',
                              properties={
                                  'name': StringField(analyzer=html_strip),
                                  'id': fields.IntegerField()
                              })

    eye = fields.ObjectField(attr='eye_field_indexing',
                             properties={
                                 'name': StringField(analyzer=html_strip),
                                 'id': fields.IntegerField()
                             })

    ethnicity = fields.ObjectField(attr='ethnicity_field_indexing',
                                   properties={
                                       'name':
                                       StringField(analyzer=html_strip),
                                       'id': fields.IntegerField()
                                   })

    auth_user_nested = fields.NestedField(
        attr='auth_user_field_indexing',
        properties={
            'first_name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'last_name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'username':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        })
        })

    auth_user = fields.ObjectField(
        attr='auth_user_field_indexing',
        properties={
            'first_name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'last_name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'username':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        })
        })

    media = fields.ObjectField(attr='media_field_indexing',
                               properties={
                                   'has_photo': fields.BooleanField(),
                                   'has_video': fields.BooleanField(),
                                   'has_audio': fields.BooleanField(),
                               })

    tags = fields.ObjectField(attr='tag_field_indexing',
                              properties={
                                  'id': fields.IntegerField(),
                                  'name': fields.StringField()
                              })

    class Django:
        model = UsersProfile
Esempio n. 20
0
class CollectionItemDocument(DocType):
    """Collection item document."""

    # ID
    id = fields.IntegerField(attr='id')

    record_number = KeywordField()

    inventory_number = KeywordField()

    api_url = KeywordField(index="not_analyzed")

    web_url = KeywordField(index="not_analyzed")

    # ********************************************************************
    # *************** Main data fields for search and filtering **********
    # ********************************************************************

    importer_uid = KeywordField(attr='importer_uid_indexing')

    language_code_orig = KeywordField(attr='language_code_orig')

    department = StringField(
        attr='department_indexing',
        analyzer=html_strip,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            # 'suggest': fields.CompletionField(),
        })

    # ********************************************************************
    # ***************************** English ******************************
    # ********************************************************************

    title_en = StringField(
        attr='title_en_indexing',
        analyzer=html_strip_synonyms_en,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            # 'suggest': fields.CompletionField(),
        })

    description_en = StringField(
        attr='description_en_indexing',
        analyzer=html_strip_synonyms_en,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            # 'suggest': fields.CompletionField(),
        })

    period_en = StringField(
        attr='period_en_indexing',
        analyzer=html_strip_synonyms_en,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            # 'suggest': fields.CompletionField(),
        })

    period_1_en = fields.NestedField(
        attr='period_1_en_indexing',
        properties={
            'name':
            StringField(analyzer=html_strip_synonyms_en,
                        fields={
                            'raw': KeywordField(),
                        }),
            'period_2_en':
            fields.NestedField(
                properties={
                    'name':
                    StringField(analyzer=html_strip_synonyms_en,
                                fields={
                                    'raw': KeywordField(),
                                }),
                    'period_3_en':
                    fields.NestedField(
                        properties={
                            'name':
                            StringField(analyzer=html_strip_synonyms_en,
                                        fields={
                                            'raw': KeywordField(),
                                        }),
                            'period_4_en':
                            fields.NestedField(
                                properties={
                                    'name':
                                    StringField(
                                        analyzer=html_strip_synonyms_en,
                                        fields={
                                            'raw': KeywordField(),
                                        })
                                })
                        })
                })
        })

    primary_object_type_en = StringField(
        attr='primary_object_type_en_indexing',
        analyzer=html_strip_synonyms_en,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            'suggest': fields.CompletionField(),
        })

    object_type_en = StringField(attr='object_type_en_indexing',
                                 analyzer=html_strip_synonyms_en,
                                 fields={
                                     'raw': KeywordField(),
                                     'natural':
                                     StringField(analyzer='english'),
                                     'suggest': fields.CompletionField(),
                                 })

    # To be shown on the detail page
    object_type_detail_en = fields.TextField(
        attr='object_type_detail_en_indexing', index='no')

    material_en = StringField(
        attr='material_en_indexing',
        analyzer=html_strip_synonyms_en,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            # 'suggest': fields.CompletionField(),
        })

    # To be shown on the detail page
    material_detail_en = fields.TextField(attr='material_detail_en_indexing',
                                          index='no')

    city_en = StringField(
        attr='city_en_indexing',
        analyzer=html_strip_synonyms_en,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            # 'suggest': fields.CompletionField(),
        })

    country_en = StringField(
        attr='country_en_indexing',
        analyzer=html_strip_synonyms_en,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='english'),
            # 'suggest': fields.CompletionField(),
        })

    # To be shown on the detail page
    references_en = fields.TextField(attr='references_en_indexing', index='no')

    # To be shown on the detail page
    acquired_en = fields.TextField(attr='acquired_en_indexing', index='no')

    # To be shown on the detail page
    site_found_en = fields.TextField(attr='site_found_en_indexing', index='no')

    # To be shown on the detail page
    reign_en = fields.TextField(attr='reign_en_indexing', index='no')

    # To be shown on the detail page
    keywords_en = fields.TextField(attr='keywords_en_indexing', index='no')

    # To be shown on the detail page
    dynasty_en = fields.TextField(attr='dynasty_en_indexing', index='no')

    # New fields
    # To be shown on the detail page
    credit_line_en = fields.TextField(attr='credit_line_en_indexing',
                                      index='no')

    # To be shown on the detail page
    region_en = fields.TextField(attr='region_en_indexing', index='no')

    # To be shown on the detail page
    sub_region_en = fields.TextField(attr='sub_region_en_indexing', index='no')

    # To be shown on the detail page
    locale_en = fields.TextField(attr='locale_en_indexing', index='no')

    # To be shown on the detail page
    excavation_en = fields.TextField(attr='excavation_en_indexing', index='no')

    # To be shown on the detail page
    museum_collection_en = fields.TextField(
        attr='museum_collection_en_indexing', index='no')

    # To be shown on the detail page
    style_en = fields.TextField(attr='style_en_indexing', index='no')

    # To be shown on the detail page
    culture_en = fields.TextField(attr='culture_en_indexing', index='no')

    # To be shown on the detail page
    inscriptions_en = fields.TextField(attr='inscriptions_en_indexing',
                                       index='no')

    # To be shown on the detail page
    provenance_en = fields.TextField(attr='provenance_en_indexing', index='no')

    # To be shown on the detail page
    exhibitions_en = fields.TextField(attr='exhibitions_en_indexing',
                                      index='no')

    # ********************************************************************
    # ****************************** Dutch *******************************
    # ********************************************************************

    title_nl = StringField(
        attr='title_nl_indexing',
        analyzer=html_strip_synonyms_nl,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='dutch'),
            # 'suggest': fields.CompletionField(),
        })

    description_nl = StringField(
        attr='description_nl_indexing',
        analyzer=html_strip_synonyms_nl,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='dutch'),
            # 'suggest': fields.CompletionField(),
        })

    period_nl = StringField(
        attr='period_nl_indexing',
        analyzer=html_strip_synonyms_nl,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='dutch'),
            # 'suggest': fields.CompletionField(),
        })

    period_1_nl = fields.NestedField(
        attr='period_1_nl_indexing',
        properties={
            'name':
            StringField(analyzer=html_strip_synonyms_nl,
                        fields={
                            'raw': KeywordField(),
                        }),
            'period_2_nl':
            fields.NestedField(
                properties={
                    'name':
                    StringField(analyzer=html_strip_synonyms_nl,
                                fields={
                                    'raw': KeywordField(),
                                }),
                    'period_3_nl':
                    fields.NestedField(
                        properties={
                            'name':
                            StringField(analyzer=html_strip_synonyms_nl,
                                        fields={
                                            'raw': KeywordField(),
                                        }),
                            'period_4_nl':
                            fields.NestedField(
                                properties={
                                    'name':
                                    StringField(
                                        analyzer=html_strip_synonyms_nl,
                                        fields={
                                            'raw': KeywordField(),
                                        })
                                })
                        })
                })
        })

    primary_object_type_nl = StringField(
        attr='primary_object_type_nl_indexing',
        analyzer=html_strip_synonyms_nl,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='dutch'),
            'suggest': fields.CompletionField(),
        })

    object_type_nl = StringField(attr='object_type_nl_indexing',
                                 analyzer=html_strip_synonyms_nl,
                                 fields={
                                     'raw': KeywordField(),
                                     'natural': StringField(analyzer='dutch'),
                                     'suggest': fields.CompletionField(),
                                 })

    # To be shown on the detail page
    object_type_detail_nl = fields.TextField(
        attr='object_type_detail_nl_indexing', index='no')

    material_nl = StringField(
        attr='material_nl_indexing',
        analyzer=html_strip_synonyms_nl,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='dutch'),
            # 'suggest': fields.CompletionField(),
        })

    # To be shown on the detail page
    material_detail_nl = fields.TextField(attr='material_detail_nl_indexing',
                                          index='no')

    city_nl = StringField(
        attr='city_nl_indexing',
        analyzer=html_strip_synonyms_nl,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='dutch'),
            # 'suggest': fields.CompletionField(),
        })

    country_nl = StringField(
        attr='country_nl_indexing',
        analyzer=html_strip_synonyms_nl,
        fields={
            'raw': KeywordField(),
            'natural': StringField(analyzer='dutch'),
            # 'suggest': fields.CompletionField(),
        })

    # To be shown on the detail page
    keywords_nl = fields.TextField(attr='keywords_nl_indexing', index='no')

    # To be shown on the detail page
    acquired_nl = fields.TextField(attr='acquired_nl_indexing', index='no')

    # To be shown on the detail page
    site_found_nl = fields.TextField(attr='site_found_nl_indexing', index='no')

    # To be shown on the detail page
    reign_nl = fields.TextField(attr='reign_nl_indexing', index='no')

    # To be shown on the detail page
    references_nl = fields.TextField(attr='references_nl_indexing', index='no')

    # To be shown on the detail page
    dynasty_nl = fields.TextField(attr='dynasty_nl_indexing', index='no')

    # New fields
    # To be shown on the detail page
    credit_line_nl = fields.TextField(attr='credit_line_nl_indexing',
                                      index='no')

    # To be shown on the detail page
    region_nl = fields.TextField(attr='region_nl_indexing', index='no')

    # To be shown on the detail page
    sub_region_nl = fields.TextField(attr='sub_region_nl_indexing', index='no')

    # To be shown on the detail page
    locale_nl = fields.TextField(attr='locale_nl_indexing', index='no')

    # To be shown on the detail page
    excavation_nl = fields.TextField(attr='excavation_nl_indexing', index='no')

    # To be shown on the detail page
    museum_collection_nl = fields.TextField(
        attr='museum_collection_nl_indexing', index='no')

    # To be shown on the detail page
    style_nl = fields.TextField(attr='style_nl_indexing', index='no')

    # To be shown on the detail page
    culture_nl = fields.TextField(attr='culture_nl_indexing', index='no')

    # To be shown on the detail page
    inscriptions_nl = fields.TextField(attr='inscriptions_nl_indexing',
                                       index='no')

    # To be shown on the detail page
    provenance_nl = fields.TextField(attr='provenance_nl_indexing', index='no')

    # To be shown on the detail page
    exhibitions_nl = fields.TextField(attr='exhibitions_nl_indexing',
                                      index='no')

    # ********************************************************************
    # ************************** Language independent ********************
    # ********************************************************************

    dimensions = StringField(
        attr='dimensions_indexing',
        analyzer=html_strip,
        fields={
            'raw': KeywordField(),
            'natural': StringField(),
            # 'suggest': fields.CompletionField(),
        })

    object_date_begin = StringField(
        attr='object_date_begin_indexing',
        analyzer=html_strip,
        fields={
            'raw': KeywordField(),
            'natural': StringField(),
            # 'suggest': fields.CompletionField(),
        })

    object_date_end = StringField(
        attr='object_date_end_indexing',
        analyzer=html_strip,
        fields={
            'raw': KeywordField(),
            'natural': StringField(),
            # 'suggest': fields.CompletionField(),
        })

    location = fields.GeoPointField(attr='geo_location_indexing')

    # List of 32x32 PNG versions of the images. Full path to.
    images = fields.ListField(StringField(attr='images_indexing'))

    # List of image URLs.
    images_urls = fields.ListField(
        fields.ObjectField(attr='images_urls_indexing',
                           properties={
                               'th': KeywordField(index="not_analyzed"),
                               'lr': KeywordField(index="not_analyzed"),
                           }))

    # Classified as by our AI
    classified_as = fields.ListField(
        StringField(attr='classified_as_indexing',
                    fields={
                        'raw': KeywordField(),
                    }))

    # Classified as 1st element
    classified_as_1 = StringField(attr='classified_as_1_indexing',
                                  fields={
                                      'raw': KeywordField(),
                                  })

    # Classified as 2nd element
    classified_as_2 = StringField(attr='classified_as_2_indexing',
                                  fields={
                                      'raw': KeywordField(),
                                  })

    # Classified as 3rd element
    classified_as_3 = StringField(attr='classified_as_3_indexing',
                                  fields={
                                      'raw': KeywordField(),
                                  })

    # ********************************************************************
    # ************** Nested fields for search and filtering **************
    # ********************************************************************

    # # City object
    # country = fields.NestedField(
    #     properties={
    #         'name': StringField(
    #             analyzer=html_strip,
    #             fields={
    #                 'raw': KeywordField(),
    #                 'suggest': fields.CompletionField(),
    #             }
    #         ),
    #         'info': StringField(analyzer=html_strip),
    #         'location': fields.GeoPointField(attr='location_field_indexing'),
    #     }
    # )
    #
    # location = fields.GeoPointField(attr='location_field_indexing')

    class Meta(object):
        """Meta options."""

        model = Item  # The model associate with this DocType

    def get_queryset(self):
        """Filter out items that are not eligible for indexing."""
        qs = super(CollectionItemDocument, self).get_queryset()

        # qs = qs.select_related('period_node').prefetch_related('images')

        filters = []
        for field in ['title']:
            for language in ['en', 'nl']:
                filters.extend([
                    Q(**{"{}_{}__isnull".format(field, language): True}),
                    Q(**{"{}_{}__exact".format(field, language): ''}),
                ])

        if filters:
            qs = qs.exclude(six.moves.reduce(operator.or_, filters))

        # We concatenate ``object_type`` and ``classification`` fields, after
        # cleaning them. Therefore, db-only checks don't work here.
        ids = []
        for item in qs:
            if not (item.object_type_en_indexing
                    and item.object_type_nl_indexing):
                ids.append(item.pk)

        return qs.exclude(id__in=ids)

    def prepare_department(self, instance):
        """Prepare department."""
        return instance.department_indexing \
            if instance.department_indexing\
            else VALUE_NOT_SPECIFIED

    def prepare_object_date_begin(self, instance):
        """Prepare material."""
        return instance.object_date_begin_indexing

    def prepare_object_date_end(self, instance):
        """Prepare material."""
        return instance.object_date_end_indexing

    # ********************************************************************
    # ***************************** English ******************************
    # ********************************************************************

    def prepare_material_en(self, instance):
        """Prepare material."""
        return instance.material_en_indexing \
            if instance.material_en_indexing\
            else VALUE_NOT_SPECIFIED

    def prepare_period_en(self, instance):
        """Prepare state."""
        return instance.period_en_indexing \
            if instance.period_en_indexing \
            else VALUE_NOT_SPECIFIED

    def prepare_dynasty_en(self, instance):
        """Prepare dynasty."""
        return instance.dynasty_en_indexing \
            if instance.dynasty_en_indexing \
            else VALUE_NOT_SPECIFIED

    def prepare_description_en(self, instance):
        """Prepare description."""
        return instance.description_en_indexing \
            if instance.description_en_indexing\
            else VALUE_NOT_SPECIFIED

    def prepare_city_en(self, instance):
        """Prepare city."""
        return instance.city_en_indexing \
            if instance.city_en_indexing\
            else VALUE_NOT_SPECIFIED

    def prepare_country_en(self, instance):
        """Prepare country."""
        return instance.country_en_indexing \
            if instance.country_en_indexing \
            else VALUE_NOT_SPECIFIED

    # ********************************************************************
    # ****************************** Dutch *******************************
    # ********************************************************************

    def prepare_material_nl(self, instance):
        """Prepare material."""
        return instance.material_nl_indexing \
            if instance.material_nl_indexing\
            else VALUE_NOT_SPECIFIED

    def prepare_period_nl(self, instance):
        """Prepare state."""
        return instance.period_nl_indexing \
            if instance.period_nl_indexing \
            else VALUE_NOT_SPECIFIED

    def prepare_dynasty_nl(self, instance):
        """Prepare dynasty."""
        return instance.dynasty_nl_indexing \
            if instance.dynasty_nl_indexing \
            else VALUE_NOT_SPECIFIED

    def prepare_description_nl(self, instance):
        """Prepare description."""
        return instance.description_nl_indexing \
            if instance.description_nl_indexing\
            else VALUE_NOT_SPECIFIED

    def prepare_city_nl(self, instance):
        """Prepare city."""
        return instance.city_nl_indexing \
            if instance.city_nl_indexing\
            else VALUE_NOT_SPECIFIED

    def prepare_country_nl(self, instance):
        """Prepare country."""
        return instance.country_nl_indexing \
            if instance.country_nl_indexing \
            else VALUE_NOT_SPECIFIED
class JournalDocument(Document):
    """Journal 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) search and filtering
    # functionality where all of the fields are used.

    # ISBN/ID
    isbn = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })

    # ********************************************************************
    # *********************** Main data fields for search ****************
    # ********************************************************************

    title = StringField(analyzer=html_strip,
                        fields={
                            'raw':
                            KeywordField(),
                            'suggest':
                            fields.CompletionField(),
                            'edge_ngram_completion':
                            StringField(analyzer=edge_ngram_completion),
                            'mlt':
                            StringField(analyzer='english'),
                        })

    description = StringField(analyzer=html_strip,
                              fields={
                                  'raw': KeywordField(),
                                  'mlt': StringField(analyzer='english'),
                              })

    summary = StringField(analyzer=html_strip,
                          fields={
                              'raw': KeywordField(),
                              'mlt': StringField(analyzer='english'),
                          })

    # ********************************************************************
    # ********** Additional fields for search and filtering **************
    # ********************************************************************

    # Publication date
    publication_date = fields.DateField()

    # Price
    price = fields.FloatField()

    # Pages
    pages = fields.IntegerField()

    # Stock count
    stock_count = fields.IntegerField()

    # Date created
    created = fields.DateField(attr='created_indexing')

    class Django(object):
        model = Journal  # The model associate with this Document

    class Meta(object):
        parallel_indexing = True
        # queryset_pagination = 50  # This will split the queryset
        #                           # into parts while indexing

    def prepare_summary(self, instance):
        """Prepare summary."""
        return instance.summary[:32766] if instance.summary else None
class AddressDocument(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) search and filtering
    # functionality where all of the fields are used.

    # ID
    id = fields.IntegerField(attr='id')

    # ********************************************************************
    # *********************** Main data fields for search ****************
    # ********************************************************************
    __street_fields = {
        'raw': KeywordField(),
        'suggest': fields.CompletionField(),

    }

    if ELASTICSEARCH_GTE_5_0:
        __street_fields.update(
            {
                'suggest_context': fields.CompletionField(
                    contexts=[
                        {
                            "name": "loc",
                            "type": "geo",
                            "path": "location",
                            "precision": "1000km",
                        },
                    ]
                ),
            }
        )
    street = StringField(
        analyzer=html_strip,
        fields=__street_fields
    )

    house_number = StringField(analyzer=html_strip)

    appendix = StringField(analyzer=html_strip)

    zip_code = StringField(
        analyzer=html_strip,
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
        }
    )

    # ********************************************************************
    # ********** Additional fields for search and filtering **************
    # ********************************************************************

    # City object
    city = fields.ObjectField(
        properties={
            'name': StringField(
                analyzer=html_strip,
                fields={
                    'raw': KeywordField(),
                    'suggest': fields.CompletionField(),
                }
            ),
            'info': StringField(analyzer=html_strip),
            'location': fields.GeoPointField(attr='location_field_indexing'),
            'country': fields.ObjectField(
                properties={
                    'name': StringField(
                        analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }
                    ),
                    'info': StringField(analyzer=html_strip),
                    'location': fields.GeoPointField(
                        attr='location_field_indexing'
                    )
                }
            )
        }
    )

    # Country object
    country = fields.NestedField(
        attr='country_indexing',
        properties={
            'name': StringField(
                analyzer=html_strip,
                fields={
                    'raw': KeywordField(),
                    'suggest': fields.CompletionField(),
                }
            ),
            'city': fields.ObjectField(
                properties={
                    'name': StringField(
                        analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                        },
                    ),
                },
            ),
        },
    )

    # Continent object
    continent = fields.NestedField(
        attr='continent_indexing',
        properties={
            'id': fields.IntegerField(),
            'name': StringField(
                analyzer=html_strip,
                fields={
                    'raw': KeywordField(),
                    'suggest': fields.CompletionField(),
                }
            ),
            'country': fields.NestedField(
                properties={
                    'id': fields.IntegerField(),
                    'name': StringField(
                        analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                        }
                    ),
                    'city': fields.NestedField(
                        properties={
                            'id': fields.IntegerField(),
                            'name': StringField(
                                analyzer=html_strip,
                                fields={
                                    'raw': KeywordField(),
                                }
                            )
                        }
                    )
                }
            )
        }
    )

    location = fields.GeoPointField(
        attr='location_field_indexing',
    )

    class Django(object):
        model = Address  # The model associate with this Document

    class Meta(object):
        parallel_indexing = True
Esempio n. 23
0
class CityDocument(Document):
    """City Elasticsearch document.

    This document has been created purely for testing out complex fields.
    """

    # 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) search and filtering
    # functionality where all of the fields are used.

    # ID
    id = fields.IntegerField(attr='id')

    # ********************************************************************
    # ********************** Main data fields for search *****************
    # ********************************************************************

    name = StringField(analyzer=html_strip,
                       fields={
                           'raw': KeywordField(),
                           'suggest': fields.CompletionField(),
                       })

    info = StringField(analyzer=html_strip)

    # ********************************************************************
    # ************** Nested fields for search and filtering **************
    # ********************************************************************

    # City object
    country = fields.NestedField(
        properties={
            'name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'info':
            StringField(analyzer=html_strip),
            'location':
            fields.GeoPointField(attr='location_field_indexing'),
        })

    location = fields.GeoPointField(attr='location_field_indexing')

    # ********************************************************************
    # ********** Other complex fields for search and filtering ***********
    # ********************************************************************

    boolean_list = fields.ListField(StringField(attr='boolean_list_indexing'))
    # boolean_dict_indexing = fields.ObjectField(
    #     properties={
    #         'true': fields.BooleanField(),
    #         'false': fields.BooleanField(),
    #     }
    # )
    datetime_list = fields.ListField(
        StringField(attr='datetime_list_indexing'))
    # datetime_dict_indexing
    float_list = fields.ListField(StringField(attr='float_list_indexing'))
    # float_dict_indexing
    integer_list = fields.ListField(StringField(attr='integer_list_indexing'))

    # integer_dict_indexing

    class Django(object):
        model = City  # The model associate with this Document

    class Meta(object):
        parallel_indexing = True
Esempio n. 24
0
class AddressDocument(Document):
    id = fields.IntegerField(attr='id')
    street = StringField(analyzer=html_strip,
                         fields={
                             'raw': KeywordField(),
                             'suggest': fields.CompletionField(),
                         })
    house_number = StringField(analyzer=html_strip)
    appendix = StringField(analyzer=html_strip)
    zip_code = 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()
                        }),
            'info':
            StringField(analyzer=html_strip),
            'location':
            fields.GeoPointField(attr='location_field_indexing'),
            'country':
            fields.ObjectField(
                properties={
                    'name':
                    StringField(analyzer=html_strip,
                                fields={
                                    'raw': KeywordField(),
                                    'suggest': fields.CompletionField(),
                                }),
                    'info':
                    StringField(analyzer=html_strip),
                    'location':
                    fields.GeoPointField(attr='location_field_indexing')
                })
        })

    # Defining the ``@property`` functions in the address model
    country = fields.NestedField(
        attr='country_indexing',
        properties={
            'name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'city':
            fields.ObjectField(
                properties={
                    'name':
                    StringField(analyzer=html_strip,
                                fields={'raw': KeywordField()})
                })
        })

    continent = fields.NestedField(
        attr='continent_indexing',
        properties={
            'name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField()
                        }),
            'country':
            fields.NestedField(
                properties={
                    'name':
                    StringField(analyzer=html_strip,
                                fields={'raw': KeywordField()}),
                    'city':
                    fields.NestedField(
                        properties={
                            'name':
                            StringField(analyzer=html_strip,
                                        fields={'raw': KeywordField()})
                        })
                })
        })

    location = fields.GeoPointField(attr='location_field_indexing')

    class Django(object):
        model = Address
Esempio n. 25
0
class AddressDocument(DocType):
    """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) search and filtering
    # functionality where all of the fields are used.

    # ID
    id = fields.IntegerField(attr='id')

    # ********************************************************************
    # *********************** Main data fields for search ****************
    # ********************************************************************

    street = StringField(analyzer=html_strip,
                         fields={
                             'raw': KeywordField(),
                             'suggest': fields.CompletionField(),
                         })

    house_number = StringField(analyzer=html_strip)

    appendix = StringField(analyzer=html_strip)

    zip_code = StringField(analyzer=html_strip,
                           fields={
                               'raw': KeywordField(),
                               'suggest': fields.CompletionField(),
                           })

    # ********************************************************************
    # ********** Additional fields for search and filtering **************
    # ********************************************************************

    # City object
    city = fields.ObjectField(
        properties={
            'name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'info':
            StringField(analyzer=html_strip),
            'location':
            fields.GeoPointField(attr='location_field_indexing'),
            'country':
            fields.ObjectField(
                properties={
                    'name':
                    StringField(analyzer=html_strip,
                                fields={
                                    'raw': KeywordField(),
                                    'suggest': fields.CompletionField(),
                                }),
                    'info':
                    StringField(analyzer=html_strip),
                    'location':
                    fields.GeoPointField(attr='location_field_indexing')
                })
        })

    # Country object
    country = fields.NestedField(
        attr='country_indexing',
        properties={
            'name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'city':
            fields.ObjectField(properties={
                'name':
                StringField(
                    analyzer=html_strip,
                    fields={
                        'raw': KeywordField(),
                    },
                ),
            }, ),
        },
    )

    # Continent object
    continent = fields.NestedField(
        attr='continent_indexing',
        properties={
            'id':
            fields.IntegerField(),
            'name':
            StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        }),
            'country':
            fields.NestedField(
                properties={
                    'id':
                    fields.IntegerField(),
                    'name':
                    StringField(analyzer=html_strip,
                                fields={
                                    'raw': KeywordField(),
                                }),
                    'city':
                    fields.NestedField(
                        properties={
                            'id':
                            fields.IntegerField(),
                            'name':
                            StringField(analyzer=html_strip,
                                        fields={
                                            'raw': KeywordField(),
                                        })
                        })
                })
        })

    location = fields.GeoPointField(attr='location_field_indexing')

    class Meta(object):
        """Meta options."""

        model = Address  # The model associate with this DocType
Esempio n. 26
0
class BookDocument(DocType):
    """Book 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) search and filtering
    # functionality where all of the fields are used.

    # ID
    id = fields.IntegerField(attr='id')

    # ********************************************************************
    # *********************** Main data fields for search ****************
    # ********************************************************************

    title = StringField(analyzer=html_strip,
                        fields={
                            'raw': KeywordField(),
                            'suggest': fields.CompletionField(),
                        })

    description = StringField(analyzer=html_strip,
                              fields={
                                  'raw': KeywordField(),
                              })

    summary = StringField(analyzer=html_strip, fields={'raw': KeywordField()})

    # ********************************************************************
    # ********** Additional fields for search and filtering **************
    # ********************************************************************

    authors = fields.ListField(
        StringField(analyzer=html_strip, fields={
            'raw': KeywordField(),
        }))

    # Publisher
    publisher = StringField(attr='publisher_indexing',
                            analyzer=html_strip,
                            fields={
                                'raw': KeywordField(),
                                'suggest': fields.CompletionField(),
                            })

    # Publication date
    publication_date = fields.DateField()

    # State
    state = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })

    # ISBN
    isbn = StringField(analyzer=html_strip, fields={
        'raw': KeywordField(),
    })

    # Price
    price = fields.FloatField()

    # Pages
    pages = fields.IntegerField()

    # Stock count
    stock_count = fields.IntegerField()

    # Tags
    tags = StringField(attr='tags_indexing',
                       analyzer=html_strip,
                       fields={
                           'raw': KeywordField(multi=True),
                           'suggest': fields.CompletionField(multi=True),
                       },
                       multi=True)

    null_field = fields.StringField(attr='null_field_indexing')

    class Meta(object):
        """Meta options."""

        model = Book  # The model associate with this DocType

    def prepare_summary(self, instance):
        """Prepare summary."""
        return instance.summary[:32766]

    def prepare_authors(self, instance):
        """Prepare authors."""
        return [author.name for author in instance.authors.all()]