SuggesterFilterBackend not returning expected SerializerMethod responses.
Opened this issue · 5 comments
SuggesterFilterBackend not returning SerializerMethod responses. it is perfectly ok with CompoundSearchFilterBackend.
but I am facing the issue with suggesters.
Here is my document.py
`@registry.register_document
class BrandDocument(Document):
code = fields.TextField()
name = fields.TextField(
attr='name',
fields={
'suggest': fields.Completion(),
}
)
name_ar = fields.TextField(
attr='name_ar',
fields={
'suggest': fields.Completion(),
}
)
brand_name_country = fields.TextField(
attr='brand_name_country',
fields={
'suggest': fields.Completion(),
}
)
.....
`
Here is my serializers.py
`class BrandDocumentSerializer(DocumentSerializer):
..........
brand_name_country = serializers.SerializerMethodField()
class Meta:
document = BrandDocument
fields = (
'code',
'name',
'name_ar',
'slug',
'store',
'label',
'brand_name_country',
'primary_category',
'brand_denomination_range',
'brand_image_gallery',
'brand_image_data'
)
.................
def get_brand_name_country(self, obj):
return "{} {}".format(obj.name, obj.store['country']['name'])
`
And here is my viewset
class BrandDocumentView(DocumentViewSet):
document = BrandDocument
serializer_class = BrandDocumentSerializer
filter_backends = [
CompoundSearchFilterBackend,
FilteringFilterBackend,
SuggesterFilterBackend,
]
pagination_class = BrandSearchPagination
# renderer_classes = [JSONRenderer]
# for specify search fields
search_fields = {
'name': {'fuzziness': 'AUTO'},
'name_ar': {'fuzziness': 'AUTO'},
}
# Define filtering fields
filter_fields = {
'store': 'store.country.code'
}
# specify fields for suggesters with auto-completion
suggester_fields = {
'name_suggest': {
'field': 'name.suggest',
'suggesters': [
SUGGESTER_COMPLETION,
],
},
'name_ar_suggest': {
'field': 'name_ar.suggest',
'suggesters': [
SUGGESTER_COMPLETION,
],
},
'brand_name_country_suggest': {
'field': 'brand_name_country.suggest',
'suggesters': [
SUGGESTER_COMPLETION,
],
'serializer_field': 'brand_name_country',
},
}
When I make a search it perfectly shows the result. like this:
but in suggestion i did't get the actual response:
look here, suggester response data are not the same as search response data. in search 'brand_name_country'
return its value. but in suggestion completion, it returns Null
. and also in suggesters, it didn't return the images' absolute url's.
please have a look at this guys.
Yep. It doesn't yet work with serializers.
Oh.. could you please advise me if there is any hope for doing the same. or there is any way to pass params with SuggesterFilterBackend API..?
suppose I want to search for suggestions with 'amazon' in 'UAE' country, is that possible?
...suggest/?name_suggest__completion=amazon&country=ae
Sure. Look, suggester backend comes from a view mix-in. You override it and fix it as you want.
Sure. Look, suggester backend comes from a view mix-in. You override it and fix it as you want.
Ok, thank you for your quick reply. I think I can manage my requirement with category context suggesters.
thank you for the great package.👍🏻
Yep, they are also supported. Check some examples here.