2014-03-19 76 views
0

我在django中爲我的頁面編寫了一個小型搜索引擎。如何在django中執行此搜索邏輯

我的查詢代碼:

sterm = request.GET.get('searchterm') 
books = Book.objects.filter(title__iregex=r"\y{0}\y".format(sterm)) 

一個與此代碼的問題是,如果我搜索"python test",這是給我的只有這在他們的頭銜有"python test"書。但我也需要其書名只有"python""test"的圖書。我知道,我可以使用Q。但我需要一些有效的查找,我在想這樣的邏輯:

sterms = sterm.split() 
if len(sterms) == 1: 
    books = Book.objects.filter(title__iregex=r"\y{0}\y".format(sterm)) 
else: 
    for each in sterms: 
     ## how can I gather here all Q's? 
    #then this? 
    books = Book.objects.filter("gathered Q's with |") 

我怎麼能收集Q過濾器,然後通過它來查詢?我對這個邏輯還好嗎?還是有更高效和更酷的方式來做到這一點?

+0

您應該在文檔中採取一些措施:https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects –

+0

我錯過了粘貼另一個鏈接:P https://bradmontgomery.net/blog/adding-q-objects-in-django/ –

+0

@limelights真棒,這是我需要感謝花花公子 – doniyor

回答

1

您可以看到如何在How to dynamically compose an OR query filter in Django?上進行動態OR'd查詢。

你需要這樣做嗎?不區分大小寫的正則表達式查詢很慢。

您是否將PostgreSQL用於您的數據存儲?如果是這樣,您可以調查全文索引功能。這會讓你有更快的方式來執行這些搜索。

+0

是的我使用postgresql。感謝您的指導,我想我會採取這種全文索引感謝 – doniyor