こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP、MySQLで動作する検索プログラム

プログラミング初級者です。
Windows環境で、PHP、データベースMySQLにて、検索サイトを練習で作っていますが、フリーで何か良い検索エンジンのプログラムはありますか?

書籍の検索サイトをつくっていまして、商品データは4万、商品のタイトルは長くても30文字、説明文は長いもので1000文字くらいのデータで、検索クエリに対して、単純にSQL文、LIKEでタイトルか説明文にワードが含まれているもの(ヒットしたもの)を画面に表示できるようにはなりました。
一応動くことが確認できたので、商品数を15万にふやしたところ、いきなり動作が重くなり、タイムアウトで画面が表示されなくなってしまいました。
SQL分のLIKEで呼び出すには処理能力に限界があり、ちゃんとした検索プログラムを組み込まないと高速に処理できないのかな?と思っています。
(そもそも、組み込んで使えるようなプログラムがあるのかもわかりませんが。。)
最終的には300万商品くらいは検索できるサイトにしたいと思ってまして、何か良いフリーの検索プログラムや、参考になりそうな書籍があれば是非ご紹介お願いいたします。

初級者なので、適切な質問になっていないかもしれませんが、お分かりのかた、アドバイスくださいませ。

投稿日時 - 2012-08-17 17:03:42

QNo.7648925

困ってます

質問者が選んだベストアンサー

検索を早くする方法はいくつかありますが環境がわからない為
1.Indexを張る。
2.検索結果を別ファイルで持つ。
3.テーブル構成を変える。
4.DBサーバのスペックを変える
5.作り方にもよりますがプログラム側で取得したデータのJoin等を行う。
等々があります。

時間があるようでしたら

夢幻
http://www.yumemaboroshi.net/

で似たようなサイトをダウンロードしてどういう作り方をしているか見てみてはどうでしょう?

投稿日時 - 2012-08-17 18:50:03

お礼

ご回答ありがとうございます。
インデックスという考え方を知りませんでした。まずはそのあたりを勉強することで前進しそうです。またそもそもテーブル構成もパフォーマンスをまったく意識していなかったので、改善の余地がありそうです。勉強すべきポイントが見えてきました。ありがとうございました。

投稿日時 - 2012-08-18 23:29:16

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>単純にSQL文、LIKEでタイトルか説明文にワードが含まれているもの

インデックスは設定していますか?
LIKEは前方一致もしくは後方一致である程度のスピードが期待できます。
前方・後方一致では必ずしも有効な処理が期待できませんのでご注意ください

>説明文は長いもので1000文字くらいのデータ

とありますが、この長さになるとヒットさせるのであれば
全文検索で処理する必要がありそうです。
ただ英語と違って単語の一つ一つが独立していない日本語での全文検索は
それなりに下処理が必要なので、いろいろ学習していただく必要があります。

場合によっては単なる説明分ではなくキーワードを任意に羅列した方が
よいかもしれません

投稿日時 - 2012-08-17 17:21:51

お礼

ご回答ありがとうございます。
インデックスは設定しておらず、またそういう設定ができること自体お恥ずかしながら知りませんでした。まずはここからじっくり勉強してみます。
キーワードの羅列、のところですが、長い文章を簡単な処理で単語単位に区切ってくれるような便利なものって何かあるでしょうか?トークナイザーというのを勉強すると良いのかな?と思ってますが、違いますでしょうか?もし何かご存じでしたらご教授いただけると嬉しいです。

投稿日時 - 2012-08-18 16:32:05

あなたにオススメの質問