所以我一直在尝试实现搜索功能,用户可以在其中输入关键字并查找用户。搜索方法应该在用户的字段中查找精确的单词匹配,例如名字,姓氏,工作等。
我已尝试过icontains,但也会在单词中匹配,例如,如果用户输入'a',搜索将返回包含'a'的任何内容。 (这是我在决定解决问题之前最初做的事情)
我尝试了iexact
但显然会给出完全匹配,如果用户输入'john',它会跳过名字为'john doe'的用户。
所以经过相当多的谷歌搜索后,我找到了两个stackoverflow线程
django filter icontains match whole words only
Whole-word match only in Django query
由于我使用postgresql,我切换到使用\ y而不是\ b。现在我正在使用的查询是
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个用户,其中一个用户名为“ahsan”,而另一个用户名为“ahsan saleem”。但是此查询不返回任何内容我真的很感激任何帮助。
编辑:我尝试切换到SQLite并使用\ b更改\ y,搜索似乎已开始工作。但是我无法使用sqlite,如果有人能指导我,我真的很感激。
另一个编辑:我通过切换db解决了postgresql的问题。无论如何都是一个愚蠢的错误。问题是你如何使用 mysql ,我所尝试的所有功能都失败了。
答案 0 :(得分:2)
在MySQL中,单词边界由[[:&lt ;:]]和[[:>:]](http://dev.mysql.com/doc/refman/5.7/en/regexp.html)
匹配