Python在文本字段中突出显示searchValue

时间:2018-09-06 12:54:17

标签: python django postgresql

我关注this guide,关于Django搜索。

search_value = request.query_params['searchvalue']

documents = Document.objects.filter(
    raw_text__icontains=search_value
).values_list('doc_id', flat=True)

return documents

这将基于搜索值获取文档ID的列表。但是在某些文档对象中,raw_text文本字段不止一次包含search_value。但是我仍然只获得一次doc_id。

是否有办法为过滤器中的每次匹配获取doc_id?

1 个答案:

答案 0 :(得分:2)

我未能成功使用过滤器解决此问题。因此,我在Google上寻找“突出显示结果”并找到了PostgreSQL Text Search

此搜索通过一个文本字段并返回此文本的摘要。并突出显示search_values。

我的最终代码如下:

    search_value = request.query_params['searchvalue']

    queryset = Document.objects.extra(
        select={
            'snippet': (
                "ts_headline(raw_text, plainto_tsquery(%s), "
                "'StartSel=*,StopSel=*,MaxFragments=2,"
                "FragmentDelimiter=...,MaxWords=8,MinWords=1')"
            ),
        },
        where=["search @@ plainto_tsquery(%s)"],
        params=[search_value],
        select_params=[search_value, search_value]
    )

    return Response(queryset.values('id', 'title', 'snippet', 'doc_number'))

我希望这会对其他人有所帮助:)