前提
ブログ内で指定されたハッシュタグが書かれている記事検索を行う機能の実装をしております。
イメージとしては「#新作」と検索すると、ブログ記事内に「#新作」と書かれた記事がヒットする想定の機能です。
ハッシュタグには以下のような事例があります。
■パターン①(改行でハッシュタグが羅列されている)
○○しに行ってみた。 #新作 #アップルパイ
■パターン②(段落内に半角または全角スペースでハッシュタグが記載されている)
今回は#アップル の新製品を試してみた。
実現したいこと
SQLを使って指定されたハッシュタグと完全一致する記事が書かれたレコードを抽出したい。
下記のデータの場合、「#アップル」で検索するとid:2
とid:3
がヒットするイメージです。
■blogsテーブル
id | body |
---|---|
1 | ○○しに行ってみた。<br>#新作<br>#アップルパイ |
2 | 今回は#アップル の新製品を試してみた。 |
3 | 人気ビッフェをご紹介します。<br>#アップル<br>#食べ放題 |
発生している問題・エラーメッセージ
上記のblogsテーブルの内容を踏まえて、
REGEXPを使って以下のようなクエリを作ってみましたが、完全一致でヒットせずに詰まっております。
例ですと、「#アップル」を書かれた記事だけを抽出したいのですが、#アップルパイ
が入ってるレコードも抽出されてしまいます。
■クエリ
SELECT id FROM blogs where body REGEXP "(#アップル[[:space:]| ])+";
■結果
id:1 id:2 id:3
試したこと
試した事①
全角スペースも含めるという意味で|
を定義に加えたのですが、上記の例では完全一致で動作しませんでしたので、この部分を抜いた形でクエリで試しましたが、やはり全角スペースが入ったレコードは抽出されませんでした。
■クエリ
SELECT * FROM blogs where body REGEXP "(#アップル[[:space:]])+";
■結果
id:3
試した事②
当たり前ですが、指定キーワードと全角スペース含めたクエリはヒットします。
■クエリ
SELECT * FROM blogs where body REGEXP "#アップル ";
■結果
id:2
補足情報(FW/ツールのバージョンなど)
MySQL ver.5.7
解決方法はもちろんですが、ヒントや究明までのアプローチ案などアドバイスもございましたら回答いただけますとありがたいです。
どうぞよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/15 09:00
2022/06/16 02:04