django elasticsearch dsl完成字段问题

omqzjyyz  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(401)

我正在尝试使用 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 很好,但我需要自动完成。
我哪里出错了?如果可以同时使用两个字段作为建议,那就太好了。
谢谢你的时间和帮助。

zlhcx6iw

zlhcx6iw1#

看起来您使用了错误的端点作为建议。正确的名称是 suggest .
例子:http://127.0.0.1:8000/search/publisher/suggest/?country\u suggest\u completion=ar
对应的视图集
关于同时使用两个字段作为建议的问题,可以同时获得多个字段的建议。例如,如果你有 title 以及 author ,都已正确索引和配置,您可以按以下方式查询它:
http://127.0.0.1:8000/search/books/suggest/?title\u suggest=wa&作者\u suggest=le
但是,这将返回以下结果:

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

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

相关问题