我犯了一个错误——在我们的应用程序中将一些模型实现为普通的 Django 模型(但可索引)而不是 Page 模型。
现在客户希望看到一个统一的搜索结果页面(所以分面搜索是不够的)......所以我完全卡住了。
我们正在使用 PostgreSQL 后端。s.search() 函数需要模型或查询集;并且您不能组合 PostgresSearchResults 查询集。如果我将 2 个结果集转换为列表并将它们组合起来,我将失去结果的相关性。
有任何想法吗?
我犯了一个错误——在我们的应用程序中将一些模型实现为普通的 Django 模型(但可索引)而不是 Page 模型。
现在客户希望看到一个统一的搜索结果页面(所以分面搜索是不够的)......所以我完全卡住了。
我们正在使用 PostgreSQL 后端。s.search() 函数需要模型或查询集;并且您不能组合 PostgresSearchResults 查询集。如果我将 2 个结果集转换为列表并将它们组合起来,我将失去结果的相关性。
有任何想法吗?
为了呈现非同质搜索结果,您可以使用:
from itertools import chain
假设您搜索了页面、文档、图像,并且还有一些其他结果 - 您可以这样做(包括分页,因为您也需要它):
page_results = SOME PAGE RESULTS
doc_results = docs_to_search.search(search_query, order_by_relevance=False)
img_results = images_to_search.search(search_query, order_by_relevance=False)
other_search_results = SOME RESULTS FROM SEARCHING MODELS
all_results = list(chain(other_search_results, page_results, img_results, doc_results))
# Pagination
paginator = Paginator(all_results, items_per_page, orphans=num_orphans)
try:
results = paginator.page(page)
except PageNotAnInteger:
results = paginator.page(1)
except EmptyPage:
results = paginator.page(paginator.num_pages)
然后results
从您的视图中返回并在模板中渲染{% for result in results %}