Правильный способ использования elasticsearch с DRF - PullRequest
0 голосов
/ 11 июля 2020

Я использую тестовый пример elasti c ищу здесь ссылку на документы https://django-elasticsearch-dsl-drf.readthedocs.io/en/0.1.8/quick_start.html с django rest.

Я сделал то же самое, что и документы, но в моем случае это не работает. Кроме того, в документации запускайте сервер на порту 8000, если я запускаю сервер с этим портом Connection error failed выдает ошибку, но если я запускаю на порту 9200, он работает, но возвращает 404 на изображении, показанном ниже

введите описание изображения здесь

вот мой код:

book.py

@BOOK_INDEX.doc_type
@registry.register_document
class BookDocument(Document):
    """Book Elasticsearch document."""

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

    title = fields.TextField(
        analyzer=html_strip,
        fields={
            'raw': fields.TextField(
                analyzer='keyword'
            )
        }
    )

    description = fields.TextField(
        analyzer=html_strip,
        fields={
            'raw': fields.TextField(
                analyzer='keyword'
            )
        }
    )

    summary = fields.TextField(
        analyzer=html_strip,
        fields={
            'raw': fields.TextField(
                analyzer='keyword'
            )
        }
    )

    publisher = fields.TextField(
        attr='publisher_indexing',
        analyzer=html_strip,
        fields={
            'raw': fields.TextField(
                analyzer='keyword'
            )
        }
    )

    publication_date = fields.DateField()

    state = fields.TextField(
        analyzer=html_strip,
        fields={
            'raw': fields.TextField(
                analyzer='keyword'
            )
        }
    )

    isbn = fields.TextField(
        analyzer=html_strip,
        fields={
            'raw': fields.TextField(
                analyzer='keyword'
            )
        }
    )

    price = fields.FloatField()

    pages = fields.IntegerField()

    stock_count = fields.IntegerField()

    tags = fields.TextField(
        attr='tags_indexing',
        analyzer=html_strip,
        fields={
            'raw': fields.TextField(
                analyzer='keyword',
                multi=True
            )
        },
        multi=True
    )

    class Django:
        """Meta options."""

        model = Book  # The model associate with this DocType

views.py

class BookDocumentView(DocumentViewSet):
    """The BookDocument view."""

    document = BookDocument
    serializer_class = BookDocumentSerializer
    lookup_field = 'id'
    filter_backends = [
        FilteringFilterBackend,
        IdsFilterBackend,
        OrderingFilterBackend,
        SearchFilterBackend,
    ]
    # Define search fields
    search_fields = (
        'title',
        'description',
        'summary',
    )
    # Define filter fields
    filter_fields = {
        'id': {
            'field': 'id',
            # Note, that we limit the lookups of id field in this example,
            # to `range`, `in`, `gt`, `gte`, `lt` and `lte` filters.
            'lookups': [
                LOOKUP_FILTER_RANGE,
                LOOKUP_QUERY_IN,
                LOOKUP_QUERY_GT,
                LOOKUP_QUERY_GTE,
                LOOKUP_QUERY_LT,
                LOOKUP_QUERY_LTE,
            ],
        },
        'title': 'title.raw',
        'publisher': 'publisher.raw',
        'publication_date': 'publication_date',
        'state': 'state.raw',
        'isbn': 'isbn.raw',
        'price': {
            'field': 'price.raw',
            # Note, that we limit the lookups of `price` field in this
            # example, to `range`, `gt`, `gte`, `lt` and `lte` filters.
            'lookups': [
                LOOKUP_FILTER_RANGE,
                LOOKUP_QUERY_GT,
                LOOKUP_QUERY_GTE,
                LOOKUP_QUERY_LT,
                LOOKUP_QUERY_LTE,
            ],
        }...

кто-нибудь может мне помочь с этой проблемой? В общем правильно ли я запускаю сервер на 9200 порту? Заранее спасибо!

...