gpt4 book ai didi

python - 带分组依据的 Django haystack 自定义查询

转载 作者:行者123 更新时间:2023-11-28 23:59:48 26 4
gpt4 key购买 nike

我正在处理haystackelasticsearch。是否有可能提取与此类 mysql 查询匹配的结果:

SELECT name, count(*) FROM article WHERE(这里有一些 where 子句)GROUP BY name;

article 是一种聚合所有用于搜索的信息的 View 。基于此,我制作了 haystack 索引。现在,在进行了一些搜索之后,我想添加关于该搜索的额外摘要。

我找到了某种解决方案:

articles = SearchQuerySet().filter(some_custom_filter_options)

summary = articles.facet('name').facet_counts()['fields']['name']

不幸的是,facet 'fields' 的长度限制在 100 以内?因为上层查询给了我 100 多行...

有什么办法可以实现吗?我知道我可以用简单的 for 循环解析它,但有时我会得到超过 50k 的结果。

最佳答案

Django haystack 支持多个后端,但不支持它们的所有功能。 Django haystack 不支持 Elasticsearch 聚合。看这个feature request .

这就是为什么我个人停止使用 Haystack 以使用 elasticsearch-py 充分利用 elasticSearch 的原因.

无论如何,使用 Haystack,您可以通过两种方式进行聚合:

使用低级 API

from haystack import connections

query = {
"size": 0,
"aggs": {
"group_by_name": {
"terms": {
"field": "name"
}
}
}
}

backend = connections.all()[0].get_backend()
raw_results = backend.conn.search(query, index=backend.index_name, doc_type='modelresult')
results = backend._process_results(raw_results)

有关 ElasticSearch aggregation 的更多信息和 Haystack ElasticSearch JSON Queries .

使用 Hastack + Django ORM 多查询一次。

from django.db.models import Count

articles_id = SearchQuerySet().filter(some_custom_filter_options).values_list('id', flat=True)

articles = Article.objects.filter(id__in=articles_id).annotate(nb_article=Count('name'))

关于python - 带分组依据的 Django haystack 自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com