そのため、ユーザーがキーワードを入力してユーザーを検索できる検索機能を実装しようとしています。検索方法は、ユーザーのフィールド内で正確に一致する単語を検索することになっています。たとえば、名、姓、職業などです。
私はicontainsを試しましたが、それは単語内でも一致します。たとえば、ユーザーが「a」を入力すると、検索は「a」を含むものをすべて返します。(これは、問題を修正する前に私が最初に行っていたことでした)
試してみiexact
ましたが、明らかに完全に一致し、ユーザーが「john」と入力すると、名前が「john doe」などのユーザーはスキップされます。
したがって、かなりのグーグル検索の後、2つのstackoverflowスレッドが見つかりました
django filter icontainsは単語全体のみに一致します
私は postgresql を使用しているので、\b の代わりに \y を使用するように切り替えました。今私が現在使用しているクエリは
results = User.objects.filter(first_name__iregex=r"\y{0}\y".format(first))
私も試しましたが、言及した2つのスレッドにリストされている他の方法も試しました。
results = User.objects.filter(first_name__iregex=r"\y%s\y"%first)
問題は、何も返さないことです。デバッグ中に、どのクエリが生成されているかを確認しましたが、私が知る限り、それは正しいようです。
WHERE `LinkedApp_user`.`first_name` REGEXP \yahsan\y
私のデータベースには現在、約 5 人のユーザーがいて、そのうちの 1 人は名前が「ahsan」で、もう 1 人は名前が「ahsan saleem」です。ただし、このクエリは何も返しません。助けていただければ幸いです。
編集: SQLite に切り替えて \y を \b に変更しようとすると、検索が機能し始めたようです。しかし、私は sqlite を扱うことができません。誰かが私を案内してくれたら本当にありがたいです。
別の編集: dbを切り替えることでpostgresqlの問題を解決しました。とにかく愚かな間違い。問題は、これをmysqlでどのように機能させるかです。私が試したすべてが失敗しました。