mysql全文搜索 s_如何使用QuerySets和MySql“全文搜索”在多个字段中进行Django搜索?...

我建议你实现这个:

#views.py

def normalize_query(query_string,findterms=re.compile(r'"([^"]+)"|(\S+)').findall,normspace=re.compile(r'\s{2,}').sub):

'''

Splits the query string in invidual keywords,getting rid of unecessary spaces and grouping quoted words together.

Example:

>>> normalize_query(' some random words "with quotes " and spaces')

['some','random','words','with quotes','and','spaces']

'''

return [normspace(' ',(t[0] or t[1]).strip()) for t in findterms(query_string)]

def get_query(query_string,search_fields):

'''

Returns a query,that is a combination of Q objects.

That combination aims to search keywords within a model by testing the given search fields.

'''

query = None # Query to search for every search term

terms = normalize_query(query_string)

for term in terms:

or_query = None # Query to search for a given term in each field

for field_name in search_fields:

q = Q(**{"%s__icontains" % field_name: term})

if or_query is None:

or_query = q

else:

or_query = or_query | q

if query is None:

query = or_query

else:

query = query & or_query

return query

并为每次搜索

#views.py

def search_for_something(request):

query_string = ''

found_entries = None

if ('q' in request.GET) and request.GET['q'].strip():

query_string = request.GET['q']

entry_query = get_query(query_string,['field1','field2','field3'])

found_entries = Model.objects.filter(entry_query).order_by('-something')

return render_to_response('app/template-result.html',{ 'query_string': query_string,'found_entries': found_entries },context_instance=RequestContext(request)

)

并在模板中

#template.html

和网址

#urls.py

url(r'^results/$','app.views.search_for_something',name='search_for_something'),

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值