Использование django-elasticsearch-dsl-drf, как реализовать автозаполнение и сопоставление терминов

Я очень новичок в elasticsearch, поэтому некоторая терминология может быть неправильной.

Я хочу реализовать автозаполнение, а также сопоставление терминов.

Допустим, у меня есть объект с именем "Foo Bar". Если я запрошу "fo", это сработает. Однако я также хочу иметь возможность найти этот объект по запросу "bar"

Это мой документ:

@registry.register_document
class ReviewableDocument(Document):
    id = fields.TextField()
    name = fields.TextField(
        fields={
            "raw": fields.TextField(analyzer=html_strip),
            "suggest": fields.CompletionField(),
        }
    )

    class Index:
        name = "reviewables"
        settings = {"number_of_shards": 1, "number_of_replicas": 0}

    class Django:
        model = Reviewable
        fields = [
            "url_name",
            "profile_picture",
        ]

Это мой сериализатор:

class ReviewableAutocompleteSerializer(DocumentSerializer):
    class Meta(object):
        fields = ("id", "name", "url_name")
        document = ReviewableDocument

А вот мое мнение:

class SuggestReviewableByName(DocumentViewSet):
    serializer_class = ReviewableAutocompleteSerializer
    permission_classes = (AllowAny,)

    document = ReviewableDocument

    filter_backends = [
        SuggesterFilterBackend,
    ]
    suggester_fields = {
        "name_suggest": {"field": "name.suggest", "suggesters": [SUGGESTER_COMPLETION]}
    }
Вернуться на верх