私はphp言語でウェブサイトを設計しました。私のウェブサイトには検索ボックスがあります。ユーザーが何かを検索したい場合、そこに入力するだけで目的の結果を得ることができることを意味します。これはphpを使用するために必要ですか、それともHTMLタグで簡単に発生する可能性がありますか???
5 に答える
基本検索
サイトでの単純な検索のほとんどは、サイトの構造を検索しません。MySQL の LIKE 構文を使用して、関連するデータベース テーブルのテキスト フィールド内の用語を検索します。したがって、ブログをお持ちの場合は、ユーザーがこの方法でブログの本文内を検索し、その用語を含むエントリのリストを返すことができます。いくつかの巧妙なカウントを使用すると、用語が出現する回数でそのリストを並べ替えることもできます.
このような場合、ユーザーが検索ボックスに「taco」と入力して Enter キーを押すと、データベースに対して LIKE クエリを実行する PHP ページが表示され、Taco という単語が含まれるブログ投稿がユーザーに表示されます。
リアルサーチ
上記は厳密にはサイト内検索ではありません。フラットな HTML ページやその他の何らかの方法でデータベース内にないページが多数あるサイトがある場合は、サイトをクロールし、そのデータを検索してデータを公開する必要があります。Google がこれを設定できます。また、さまざまなサードパーティ ツールを使用することもできます。ただし、Web クローラーを自分で作成する方法を学ぶことは良い練習になるかもしれません。
以下は、URL のデータベースを生成する Web クローラーの基本的な手順です。このうさぎの穴は永遠に続くため、これは検索を機能させるために必要な最小限の作業にすぎません。
データベース
データベースには 1 つのテーブルがあります。このテーブルには次のフィールドが必要です。
- (整数) ID
- (var_char) URL
- (テキスト) テキスト
- (タイムスタンプ) LastChecked
昇降補助具
クローラー自体は、継続的に実行するか、cron スケジューラーを使用して数分ごとに実行する必要があります。これらの最低限のアクションを実行する必要があります。
- 最も古い LastChecked 時刻を持つデータベースからページをロードします。(または、データベースにページがない場合はルート ページ)
- LastChecked 時刻を更新します。
- cURL またはその他の方法を使用して、ページから HTML を取得します。
- ページのテキスト コンテンツが変更された場合は、この URL のデータベース レコードを更新します。
- ページ上のすべてのアンカー タグを見つけて、
<a href="http://www.mysite.com/taco/">Tacos!</a>
これらすべての URL の配列を作成します。 - サイトにないすべてのリンクをリストから削除します。(そうしないと、Web 全体をクロールすることになります)
- URL がまだデータベースにない場合は、追加します。ページのテキストを収集し、同時に挿入します。
- 1から繰り返します。
明らかに、これはすべてのページとそこにあるテキストのリストを作成するだけですが、基本検索と同じ手法を使用してサイトの検索を作成するには十分です.
改良点
上記のクローラーは、いくつかの簡単な方法で改善できます。
- テーブルに「エラー」フィールドを追加します。URL に HTML エラー コードがあり、データがない場合は、コードを保存します。これらを検索から除外することができ、同時に便利なリンク チェッカーのように機能します。
- URL ID、カウント、および URL のチェック済みステータスを格納するランキング用の新しいテーブルを追加できます。サイト上のすべての URL を通常どおり実行し、この表のカウントを更新します。マスター リストのすべての URL がチェックされたら、「カウント」をメイン テーブルの新しい「ランク」フィールドに移動します。ランキング表をダンプして、最初からやり直してください。結果を並べ替えることができる継続的に更新されるページ ランクがあります。
- ページをクロールするたびにページ全体のコンテンツの MD5 ハッシュを保存することで、自動的に「最終変更」データを収集できます。ページを再クロールしてこの MD5 が変更されるたびに、新しいテキストを保存し、新しいテーブルにタイムスタンプを追加します。いつ変更されたか、URL ID。このデータを使用して、ページの予想変更率を構築できます。次に、「オフセット」フィールドをメイン テーブルに追加し、それを LastChecked のすべてのタイムスタンプに追加できます。このように、メイン リストの順序を変更して、いくつかのページを他のページよりも頻繁に再チェックします。
最良のことは、Google検索を使用する必要があることです。Google検索を実装することはそれほど難しくありません。サイトに関する情報を提供する必要があり、HTML ページに配置する必要があるスクリプトが生成されます
これは検索バーのphpコードです
HOME html, body, div, span, アプレット, オブジェクト, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn 、em、font、img、ins、kbd、q、s、samp、small、strong、strong、sub、sup、tt、var、dl、dt、dd、ol、ul、li、fieldset、form、label、input , textarea, フィールドセット, 凡例, テーブル, キャプション, tbody, tfoot, thead, tr, th, td { margin:0; パディング:0; ボーダー:0; アウトライン:0; }
$keyword=trim($_POST["keyword"]);
//check if the keyword is empty
if($keyword==""){
echo"no keywords";
exit;
}
//With above, you can give hints to your users when they forget to enter a keyword. Now let's go through all the files or articles in your website.
function listFiles($dir){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
//if it is a directory, then continue
if(is_dir("$dir/$file")){
listFiles("$dir/$file");
}
else{
//process the searching here with the following PHP script
}
}
}
}
//The following scripts read, process files and check whether the files contain $keyword. If $keyword is found in the file, the file address will be saved in an array-type variable.
function listFiles($dir,$keyword,&$array){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir("$dir/$file")){
listFiles("$dir/$file",$keyword,$array);
}
else{
//read file
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
//avoid search search.php itself
if($file!="search.php"){
//contain keyword?
if(eregi("$keyword",$data)){
if(eregi("(.+)",$data,$m)){
$title=$m["1"];
}
else{
$title="no title";
}
$array[]="$dir/$file $title";
}
}
}
}
}
}
//define array $array
$array=array();
//execute function
listFiles(".","php",$array);
//echo/print search results
foreach($array as $value){
list($filedir,$title)=split("[ ]",$value,"2");
echo "$value"."
\n";
}
?>
hello
</body>
</html>