动态搜索,如django的stackoverflow

时间:2017-09-10 03:11:07

标签: python django search django-queryset

有没有人知道什么插件(使用Django)最好来处理像StackOverflow这样的动态搜索?某事like this

<input type="text" value="how to [django] or [python] duplicate:yes is:answer" style="width: 50%">

我只考虑复杂的查询。

query = request.GET.get('q')

text_query = # what regex here?
tags_query = # 
is_duplicate = re.search(r'(?P<duplicate>\w+)', query)

Question.objects.filter(...)
Answer.objects.filter(...)

1 个答案:

答案 0 :(得分:0)

query = "how to [django] or [python] or [mu] duplicate:yes is:answer"

tags = re.search(r'\[(\w+)\](( or \[(\w+)\])+)?', query)
colons = re.findall(r'\w+:\w+', query)

search = query.replace(tags.group(), '')
for colon in colons:
    search = search.replace(colon, '')

print(search) # how to

然后您可以单独处理标记和冒号以进行查询。

如果您想在问题数据库中搜索搜索查询中的所有条款,您可以执行以下操作。它将找到包含所有搜索词的所有文本。

search = search.split()

db_query = Q(text__icontains=search[0])
for term in search[1:]:
    db_query = db_query | Q(text__icontains=term)

Question.objects.filter(db_query)