You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django多字段SearchHeadline搜索词高亮显示问题求助

解决多字段搜索词高亮问题

要实现title和short_description两个字段的分别高亮,只需为每个字段单独创建SearchHeadline注解即可,无需合并字段。以下是具体修改步骤:

修改views.py代码

在get_queryset方法中,为short_description字段新增一个SearchHeadline注解,与title字段使用相同的高亮样式:

class SearchResultsList(LoginRequiredMixin, ListView, CategoryMixin):
    model = QA
    context_object_name = "query_list"
    template_name = "search/SearchView.html"
    
    def get_queryset(self):
        query = self.request.GET.get("q")
        search_vector = SearchVector("title", weight="A") + SearchVector("short_description", weight="B")
        search_query = SearchQuery(query)
        
        # 为title字段创建高亮注解
        headline_title = SearchHeadline(
            'title', 
            search_query, 
            start_sel='<span class="text-decoration-underline sidebar-color">',
            stop_sel='</span>'
        )
        
        # 为short_description字段创建高亮注解
        headline_desc = SearchHeadline(
            'short_description', 
            search_query, 
            start_sel='<span class="text-decoration-underline sidebar-color">',
            stop_sel='</span>'
        )
        
        return QA.objects.annotate(
            search=search_vector,
            rank=SearchRank(search_vector, search_query),
            headline=headline_title,
            short_description_headline=headline_desc
        ).filter(rank__gte=0.3).order_by("-rank")

修改模板SearchView.html

将原本输出short_description的地方,替换为新增的高亮注解字段short_description_headline:

{% for query in query_list %}
    <div class="col-12">
        <a href="{{ query.get_absolute_url }}"><h2>{{query.headline | safe}}</h2></a>
        <p>{{query.short_description_headline | safe}}</p>
    </div>
{% empty %}
    <div>No results</div>
{% endfor %}

说明

  • 两个字段各自保留独立的HTML元素,无需合并展示
  • SearchHeadline会返回完整字段内容并高亮匹配的搜索词,不会只显示预览
  • 保持了原有的排序和权重逻辑,不影响搜索结果的排序优先级

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:50:41