我正在尝试使用 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
很好,但我需要自动完成。
我哪里出错了?如果可以同时使用两个字段作为建议,那就太好了。
谢谢你的时间和帮助。
1条答案
按热度按时间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
但是,这将返回以下结果:
但是,如果您需要根据某些标准改进您的建议,您可以使用上下文建议(在django elasticsearch dsl drf的官方文档中搜索)。