所以我一直在尝试实现一个搜索功能,用户可以在其中输入关键字并查找用户。搜索方法应该在用户的字段中查找精确的单词匹配,例如名字、姓氏、工作等
我已经尝试过 icontains 但这也会在单词中匹配,例如,如果用户输入“a”,搜索将返回包含“a”的任何内容。(这是我在决定解决问题之前最初所做的)
我试过iexact
了,但这显然会给出一个完全匹配的结果,如果用户输入“john”,它会跳过名字是“john doe”之类的用户。
所以经过相当多的谷歌搜索后,我发现了两个stackoverflow线程
因为我使用的是 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,如果有人可以指导我,我将不胜感激。
另一个编辑:我通过切换数据库解决了我的 postgresql 问题。总之是个愚蠢的错误。问题是您将如何使用mysql进行这项工作,我所尝试的一切都失败了。