スペース区切りのデータでキーワードごとの複数検索がしたいのですが…


お世話になります。
現在検索フォームを作成しているのですが、スペース区切りのキーワードに完全一致、且つ複数のキーワードに対応させたいのですが行き詰っています。

データ内容:
id | key|
------------
1 |食パン|
2 |カレーパン フランスパン|
3 |食パン カレーパン フランスパン|
4 |パン カレーパン|

スペースで区切られたキーワードに一致する場合のみ検索結果に表示したいのです。


そこで、下記のコードを試しましたがいずれも希望の動作はしませんでした…。

SELECT * FROM `TEST` WHERE key like "パン" ⇒ どれもヒットせず
SELECT * FROM `TEST` WHERE key like "%パン%" ⇒ すべてヒット

複数検索:
SELECT * FROM `TEST` WHERE key like "%パン%" AND tag like "%フランスパン%" ⇒ id=3もヒットしてしまう(id=4だけヒットさせたい)

SELECT * FROM `TEST` WHERE key like "パン" AND tag like "フランスパン" ⇒ ヒットなし

スペース区切りのキーワードごとの複数検索の方法があればご教授頂けますと幸いです。
よろしくお願いいたします。


回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/11/16 03:24:18
  • 終了:2012/11/23 03:25:03

回答(2件)

id:ku__ra__ge No.1

ku__ra__ge回答回数118ベストアンサー獲得回数402012/11/16 09:15:48

検索キーワードに区切り文字であるスペースを含めて、key項目の最初と最後の項目が検索できるようにkey項目にスペースを付け加えてやればよいのではないでしょうか。

SELECT * FROM `TEST` 
 WHERE (
       ' ' + key + ' ' like '% パン %'
   AND ' ' + key + ' ' like "% カレーパン %"
       )
id:ozakou

早速のご回答ありがとうございました。
試してみたところヒット件数が「0件」となってしまいました…。

SELECT * FROM `TEST`
WHERE (
' ' + key + ' ' like '% パン %'
)

でも試してみましたがやはり0件となってしまいました…。

2012/11/16 15:22:23
id:nakedfeels No.2

nakedfeels回答回数9ベストアンサー獲得回数32012/11/18 08:26:40

その設計では任意の入力に対して適切な結果を返すのは無理です。検索機能に LIKE を使うのは筋が良くありません。なぜなら LIKE 検索では、入力された検索ワードに % が含まれていると正しく結果が返せないからです。
Apache Solr というエンタープライズでも使われている全文検索エンジンがありますので、調べてみてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません