Django elasticsearch dsl 完成字段问题

Django elasticsearch dsl completion field issue

我正在尝试使用 django-elasticsearch-dsl-drf 对街道实施搜索建议。

这是documents.py:

class StreetDocument(Document):
    id = fields.IntegerField()
    name_ru = StringField(
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
        }
    )
    ... # same for name_uz and name_oz
    tags_ru = fields.CompletionField()
    ... # same for tags_uz and tags_oz

    class Django:
        model = Street
        fields = (
            'code',
            'street_type'
        )

views.py 我有这个:

from django_elasticsearch_dsl_drf.constants import SUGGESTER_COMPLETION
from django_elasticsearch_dsl_drf.filter_backends import SuggesterFilterBackend, CompoundSearchFilterBackend
from django_elasticsearch_dsl_drf.viewsets import DocumentViewSet

class SuggestionListAPI(DocumentViewSet):
    document = StreetDocument
    serializer_class = StreetDocumentSerializer
    filter_backends = [
        CompoundSearchFilterBackend,
        SuggesterFilterBackend,
    ]
    search_fields = (
        'code',
        'name_ru',
        'name_uz',
        'name_oz',
        'tags_ru',
        'tags_uz',
        'tags_oz'
    )
    suggester_fields = {
        'name_ru_suggest': {
            'field': 'name_ru.suggest',
            'suggesters': [
                SUGGESTER_COMPLETION,
            ],
        },
        ... # same for name_uz and name_oz
        'tags_ru': {
            'field': 'tags_ru',
            'suggesters': [
                SUGGESTER_COMPLETION,
            ],
        },
        ... # same for tags_uz and tags_oz
    }

/suggestions?name_ru_suggest__completion=tolstoy 的请求不执行任何操作,只是接收所有未过滤的街道。

请求 /suggestions?search=tolstoy 效果很好,但我需要自动完成。

我哪里错了?如果可以同时使用两个字段作为建议,那就太好了。

感谢您的宝贵时间和帮助。

您使用的建议端点似乎有误。正确的名称是 suggest.

示例:http://127.0.0.1:8000/search/publishers/suggest/?country_suggest__completion=Ar

Corresponding viewsets

关于您关于一次使用两个字段进行建议的问题,可以一次获得多个字段的建议。例如,如果您有 titleauthor,两者都已正确索引和配置,您可以按如下方式查询它:

http://127.0.0.1:8000/search/books/suggest/?title_suggest=wa&author_suggest=le

但是,这将 return 您得到以下结果:

{
    "title_suggest": [...],
    "author_suggest": [...] 
}

但是,如果您需要根据某些标准改进您的建议,您可以使用上下文建议器(在 django-elasticsearch-dsl-drf 的官方文档中搜索)。