2010-07-03 73 views
2

我有一個按名稱搜索功能,如果搜索匹配的名字或姓氏,應該返回一個人的名字。問題是,如果我搜索像'姓氏姓'這樣的字符串,它找不到匹配的名稱(猜測這是因爲單詞之間有空格)。我應該怎樣做才能使搜索工作? 另外,如果我想用相同的搜索搜索用戶名(至少在另一個表中),我該怎麼做? 非常感謝!Django搜索包含空格的字符串

我的代碼:

def search(request): 
    query = request.GET.get('q', '') 
    if query: 
     qset1 = (
      Q(first_name__icontains=query) | 
      Q(last_name__icontains=query) 
       ) 
     results = UserProfile.objects.filter(qset1).distinct() 
    else: 
     results = [] 

    return render_to_response("search/searchName.html", { 

    'results': results,  
    'query': query}, 
    context_instance=RequestContext(request)) 

回答

8

現在你的分析不會拆分查詢根本上,你可以通過結果做到這一點,環路,並建立自己的問答對象,將它放在您的查詢。

import operator 
queries = request.GET.get('q').split() 
qset1 = reduce(operator.__or__, [Q(first_name__icontains=query) | Q(last_name__icontains=query) for query in queries]) 

results = UserProfile.objects.filter(qset1).distinct() 

這基本上會做什麼是分開查詢,並循環通過每個單詞,同時做你正在做的事情。因此,如果他們搜索「弗蘭克波多爾斯基」,它會檢查「弗蘭克」是在名字,姓氏,然後如果「波多爾斯基」也在名字,姓氏,而不是整個查詢。

當然,還有更多的事情可以做,以改善像詞幹,刪除停用詞等搜索,但這是超出了這個問題的上下文。

+0

它的工作原理,謝謝! :) – dana 2010-07-03 15:05:10

+0

對我也適用,工作很好! – Spike 2012-01-13 16:05:47

相關問題