[前][次][番号順一覧][スレッド一覧]

mysql:5049

From: sin <sin <panocon@xxxxxxxxxx>>
Date: Tue, 29 Jan 2002 07:29:14 +0900
Subject: [mysql 05049] Re: 検索エンジンのワード検索

シンです。
たてやんさん、草薙さん有り難う御座います。
質問の仕方が悪くて申し訳ありません。

茶釜のサイトも見たのですが、難しそうでしたので・・
Webフォームから入力された$FORM{'word'}のキーワード、空白で区切ってandかorで検索して、テーブルのタイトルと説明で一致したサイトを表示したいのです。

キーワードが一つなら、
where title like %キーワード% or com like %キーワード%
で出来るのですが、2個以上の場合どうするのかな?・・と。
結局Perlで前処理して、
where title like %キーワード% or com like %キーワード% 
	[and/or] title like %キーワード% or com like %キーワード%

とひたすら並べる事にしました。
他に良い方法がありましたらご教示下さい。

以下Perl
# -----------------------------------------------
#   検索
    sub link_word	{
		$db	=	DBI -> connect ($db_name, $db_usr, $db_pass)
			or &error('データベースエラー','アクセス出来ません');

    	$FORM{'word'} =~ s/ / /g ;
    	$FORM{'word'} =~ s/\t/ /g ;
    	$FORM{'word'} =~ tr/[A-Z]/[a-z]/ ;

    	@words = split(/ /,$FORM{'word'}) ;
		$cond = $FORM{'cond'};

		foreach $cword (@words) {
			$word	=	$db->quote("%$cword%");

			if ($cwhere eq ''){
				$cwhere = " title like $word or com like $word";
			}else{$cwhere .= " $cond title like $word or com like $word";}
		}

		$db_count	=	$db->prepare(qq{select count(*) from $db_table where $cwhere
		 }); 
		$db_count->execute
			or &error('データベースエラー','検索出来ません');

		$omax = $db_count->fetchrow_array;
		
		if ($FORM{'FF'} eq '') { $FF	=   0; } else { $FF =   $FORM{'FF'}; }
			$TO =   $FF + $opage - 1;
		if ($TO > $omax) { $TO = $omax;
			$next_num	=	'' ;
		}else{
			$next_num	=	$TO;}

			$hit	=   0;

		$db_sth	=	$db->prepare(qq{SELECT * FROM $db_table
			 where $cwhere
		 	 order by out_count desc  limit $FF,$opage});
		$db_sth->execute
			or &error('データベースエラー',"$word コマンド実行出来ません");

		&html_seach;
	}


> たてやんっす
> 
> perlソースを出されても...
> もう少し 噛み砕いて質問しないと 答えにくいと思います
> ソースをぽんと出して答えてというのは相手にとってかなり乱暴な質問の
> ような気がします
> 答える人は perlのスクリプトを解読しなきゃ答えられないもの
> それに サブルーチンの一部で 引数とかの説明もないから...
> 
> 見たとこ Webのフォームから入力した$FORM{'word'}のキーワードを
> ファイル中から見つけるの?
> MySQL単体の方法としたら
> http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_toc.html#Fulltext_Search
> とかはいかが?(英語の翻訳はしなきゃなんないけど 難しい英語では
> ないように感じるけど)
> 
> 
> 
> 別な手法として案山子とか茶筌を使って 分かち書きに分解しておいて
> そこから一致するポイントが高いものを見つけるというのもひとつの方
> 法ですね (結構本格的な検索エンジンができると思います)
> 
> 
> sinさんの
> 題名「[mysql 05046] 検索エンジンのワード検索」のメールからの引用です
> > シンです。
> > 今、Perlで書かれた検索エンジンをMySQLに移植しているのですが、ワード検索のSQL文が
> > 思いつきません。
> > 誠に申し訳ありませんが、お教え下さい。



[前][次][番号順一覧][スレッド一覧]

      5046 2002-01-28 22:27 [sin <panocon@xxxxxxx] 検索エンジンのワード検索                
      5047 2002-01-28 23:03 ┣[Koji KUSANAGI <kusan]                                       
      6551 2002-11-08 23:50 ┃┗[HOLA <hola@xxxxxxxxx]                                     
      6552 2002-11-09 01:25 ┃ ┗[とみたまさひろ <tomm]                                   
      5048 2002-01-28 23:29 ┗[tateyan <tateyan@xxx]                                       
->    5049 2002-01-29 07:29  ┣[sin <panocon@xxxxxxx]                                     
      5051 2002-01-29 10:27  ┃┗[とみたまさひろ <tomm]                                   
      5050 2002-01-29 09:53  ┗["KAWAI,Takanori" <GC]                                     
      5055 2002-01-29 20:49   ┗[sin <panocon@xxxxxxx]