0

私は自分のウェブサイトの検索エンジンを作ろうとしています。fooまたはのような単一の単語を検索クエリとして入力すると、かなりうまく機能しますbar。問題は、 のような 2 つ以上の単語を入力すると失敗することfoo barです。

このような言葉にどう対処すればよいでしょうか。単語を ( を使用して) 分割explodeし、テーブル内の単語ごとにインデックス付きの単語を探しますか? これは良い考えとは思えません

GETこの検索エンジンのメソッドを使用しています。

<?php
if($_GET['query']){
    $search = $_GET['query'];
    $search = strip_tags($search);
    $search = trim($search);
    $search = addslashes( strtolower($search));

echo $search;
$start = microtime();
$searchquery = mysql_query("SELECT sw_wordid FROM tbl_search_word WHERE sw_word LIKE '%$search%'");
                               //tbl_search_word contains all the indexed words

$searchrow = mysql_fetch_array($searchquery);   
$end = microtime();

echo $searchrow['sw_wordid'].'<br />';
echo $end - $start;
}

?>

4

2 に答える 2

1

まず第一に、Hanky Panky 分割に同意します。それ自体は悪いオプションではありませんが、それを試すことができますが、他の代替手段を誰も助けてくれないので、もう 1 つ挙げます。多くのキーワードを検索して依存する場合はあまり効果的ではありません。結果として欲しいもの。

まず第一に、入力を適切に適切にサンチン化することをお願いします。投稿したコードのように、ユーザーが提供するものを文字列に入れないでください。決してそうしないでください。おそらくSQLインジェクションのセキュリティホールを開くことになります。PDO または mysqli を使用して、準備されたステートメントを試してください。

これを試すことができますか:

$searchquery = mysql_query("
SELECT sw_wordid FROM tbl_search_word WHERE INSTR(sw_word,'$search')>0
");

また、ベンチマークを共有して改善に役立てることができますが、結果に何を求めているのか正確にはわからないため、選択する代替手段はそれに依存する場合があります.

結果を共有してください。これがお役に立てば幸いです。

于 2013-06-11T18:40:07.360 に答える