我一直在使用elasticsearch进行搜索,并使用干草堆库显示要显示的项目。除了一件事,一切都工作正常。我希望对SearchQuerySet进行排序,以便与术语完全匹配的项应排在第一位,而部分匹配则在后面。这是代码。
sqs = SearchQuerySet().order_by('-created_at')
q = self.request.GET.get('q', '')
if q:
q = escape(q).replace('&', '&')
q = q.replace(''', "'")
q = q.replace('"', '"')
print(q)
sqs1 = sqs.filter(search_exact1__exact=q, global_search=True, is_active=True)
sqs2 = sqs.filter(search_param1=q, global_search=True, is_active=True).exclude(search_exact1__exact=q)
sqs = sqs1 | sqs2
return sqs
其中search_exact1
是Haystack的默认CharField,而search_param1
是EdgeNGram。 q
是通过的术语。