【发布时间】:2020-11-19 19:11:45
【问题描述】:
我正在尝试使用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 效果很好,但我需要自动完成。
我哪里做错了?如果可以同时使用两个字段进行建议,那就太好了。
感谢您的时间和帮助。
【问题讨论】:
标签: django elasticsearch elasticsearch-dsl