3

そのため、ユーザーがキーワードを入力してユーザーを検索できる検索機能を実装しようとしています。検索方法は、ユーザーのフィールド内で正確に一致する単語を検索することになっています。たとえば、名、姓、職業などです。

私はicontainsを試しましたが、それは単語内でも一致します。たとえば、ユーザーが「a」を入力すると、検索は「a」を含むものをすべて返します。(これは、問題を修正する前に私が最初に行っていたことでした)

試してみiexactましたが、明らかに完全に一致し、ユーザーが「john」と入力すると、名前が「john doe」などのユーザーはスキップされます。

したがって、かなりのグーグル検索の後、2つのstackoverflowスレッドが見つかりました

django filter icontainsは単語全体のみに一致します

Django クエリでのみ単語全体が一致する

私は 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でどのように機能させるかです。私が試したすべてが失敗しました。

4

1 に答える 1

4

MySQL では、単語の境界は [[:<:]] と [[:>:]] によって一致します ( http://dev.mysql.com/doc/refman/5.7/en/regexp.html )

于 2016-04-29T10:47:21.503 に答える