gpt4 book ai didi

python - Django 过滤器 - Iregex 只匹配完整的单词

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:13 26 4
gpt4 key购买 nike

所以我一直在尝试实现一种搜索功能,用户可以在其中输入关键字并查找用户。搜索方法应该在用户的字段中查找精确的单词匹配,例如名字、姓氏、工作等

我已经尝试过 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 并将\y 更改为\b 并且搜索似乎已经开始工作。但是我不会使用 sqlite,如果有人能指导我,我将不胜感激。

另一个编辑: 我已经通过切换数据库解决了我的 postgresql 问题。总之是个愚蠢的错误。问题是您将如何使用 mysql 进行此操作,我尝试的所有操作都失败了。

最佳答案

在 MySQL 中,单词边界由 [[:<:]] 和 [[:>:]] (http://dev.mysql.com/doc/refman/5.7/en/regexp.html) 匹配

关于python - Django 过滤器 - Iregex 只匹配完整的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com