我们如何使用弹性搜索在Django rest框架中获得热门搜索列表?

时间:2019-05-15 14:15:24

标签: python django elasticsearch search django-rest-framework

我正在使用django 2.1,elastic search 6.1和django-elasticsearch-dsl-drf 0.17.6。

view.py

class SchoolViewSet(DocumentViewSet):
    document = SchoolDocument
    serializer_class = SchoolDocumentSerializer
    permission_classes = (AllowAny,)

    lookup_field = 'id'
    filter_backends = [
        FilteringFilterBackend,
        CompoundSearchFilterBackend,
        FacetedSearchFilterBackend
    ]

    # Define ordering fields
    ordering_fields = {
        'name': 'name',
    }

    # Specify default ordering
    ordering = ('name',)

    faceted_search_fields = {
        'top_name_hit': {
            'field': 'name',
            'facet': TermsFacet,
            'enabled': True,
            'options': {
                'size': 4,  # Override default number of suggestions
                "order": {"_count": "desc"},
                'show_term_doc_count_error': True,
            },

        },
    }

documents.py

@INDEX.doc_type
class InstituteDocument(DocType):
    id = fields.StringField(attr='id_str')
    name = fields.StringField(
        analyzer=html_strip,
        fields={
            'raw': KeywordField(),
            'suggest': fields.CompletionField(),
            'edge_ngram_completion': fields.StringField(
                analyzer=edge_ngram_completion
            ),
        },
        fielddata=True
    )
    class Meta:
        model = School

我想获得搜索最多的学校的结果。 如何获取热门趋势列表?

1 个答案:

答案 0 :(得分:0)

如果要获取最大尺寸的文档,则需要按字段排序,如果要获取一些学校文档,则需要使用学校过滤。如果找不到这些方法,请尝试查看django es dsl drf源代码。 https://github.com/sabricot/django-elasticsearch-dsl

因为不允许写commnet,所以我在这里写。