python elasticsearch_dsl 分页,聚合
这里直接利用代码讲述,代码中有详细的注释
利用的是elasticsearch_dsl.FacetedSearch,多面查询,重写特定的方法,达到目的
第一种方法,代码如下
from django.conf import settings
from elasticsearch_dsl.query import Query
from elasticsearch_dsl import Document, Keyword, Text, FacetedSearch, Short, Q, TermsFacet
class ArticleDocument(Document):
kind = Short()
author = Keyword()
keyword = Keyword(multi=True)
title = Text(analyzer="ik_smart", search_analyzer="ik_smart", fields={
'name': Keyword()})
context = Text(analyzer="ik_smart", search_analyzer="ik_smart", fields={
'name': Keyword()})
class Index:
name = 'articles'
class ArticleSearch(FacetedSearch):
index = 'articles'
doc_types = ArticleDocument
fields = ['title', 'keyword', 'context']
# 聚合设置,根据关键字author聚合
# 关键子author,不能是Text类型,否则会触发异常,状态码400,异常信息illegal_argument_exception
# 可以提供多个聚合关键字
facets = {
'author': TermsFacet