我关注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?
答案 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'))
我希望这会对其他人有所帮助:)