所以我一直在嘗試實現搜索功能,用戶可以輸入關鍵字並查找用戶。搜索方法應該查找用戶字段內的確切單詞匹配,例如名字,姓氏,工作等Django過濾器 - iregex只匹配完整的單詞
我已經嘗試過icontains,但它也匹配單詞內,例如,如果用戶輸入'a'搜索將返回包含'a'的任何內容。 (這是我原本在做決定解決問題之前做的事情)
我試過iexact
但顯然會給出完全匹配,如果用戶輸入'john',它會跳過名字爲'john doe'什麼的。
所以經過相當多的谷歌搜索我發現兩個計算器線程
django filter icontains match whole words only
Whole-word match only in Django query
由於我使用PostgreSQL我切換到使用\Ÿ代替\灣現在我正在使用的查詢是
results = User.objects.filter(first_name__iregex=r"\y{0}\y".format(first))
我也試過了,其他方法列在我提到的兩個線程中。
results = User.objects.filter(first_name__iregex=r"\y%s\y"%first)
問題是它不會返回任何東西。在調試過程中,我已經離開並檢查了正在生成的查詢,據我所知它似乎是正確的。
WHERE `LinkedApp_user`.`first_name` REGEXP \yahsan\y
我的數據庫目前大約有5用戶提供具有其中的一個名字「阿赫桑」而另一位有名字「阿赫桑·薩利姆」。但是這個查詢什麼都沒有返我真的很感激任何幫助。
編輯:我試圖切換到SQLite並更改\ y與\ b和搜索似乎已開始工作。但是我無法使用sqlite,如果有人能指導我,我會非常感激。
另一編輯:我已經通過切換db解決了我的問題與postgresql。無論如何,這是一個愚蠢的錯誤。問題是你如何使這項工作與mysql,我所嘗試過的所有失敗。
'「由於我使用PostgreSQL我切換到使用/ Y而不是/ b。「' - 你*用'\ b'試過*看看它是否真的不起作用? – yuvi
抱歉,錯字,因爲我說它不工作。 –
是\ b與Sqlite一起工作,我也對它進行了測試。你有沒有嘗試運行沒有Django的查詢,看看它是否工作?也許postgresql是區分大小寫的,你是否嘗試過搜索'Ahsan'? – yuvi