人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

データ内容:
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 "フランスパン" ⇒ ヒットなし

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




●質問者: ぽこすけ
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ku__ra__ge

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

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

ぽこすけさんのコメント
早速のご回答ありがとうございました。 試してみたところヒット件数が「0件」となってしまいました…。 SELECT * FROM `TEST` WHERE ( ' ' + key + ' ' like '% パン %' ) でも試してみましたがやはり0件となってしまいました…。

2 ● nakedfeels

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ