私のクエリでは、基本的にこの検索エンジンの全文検索を使用しようとしています。ユーザーがアイテムを入力すると、クエリは mysql テーブル内で同一のフィールドがあるかどうかを確認します。
たとえば、ユーザーが 'iPad' と入力したとします。私のテーブルには、「タイトル」、「説明」、「キーワード」、および「リンク」フィールドがある場合があります。
私のテーブルには次のものがあるかもしれません:
Apple, which contains the term iPad once in the description
iOS 6, which contains iPad say twice, in the description and title (these are examples)
and iPad, which contains the term 'iPad' in the link, description, title and keywords.
3 番目の結果は、最初にランク付けされ、次にランク 2、次に id 1 と表示されます。
しかし、「buy iPad」と入力したい場合、クエリはまったく同じことを行いますが、両方の単語を一緒にチェックします。タイトル/説明/リンク/キーワードがフィールドで2つの単語を一緒に見つけることができない場合、上で示した方法を使用して最初の単語の最高ランクを見つけます。
Apple Store -> which contains the terms Buy and iPad in the title field
一致するものが見つからない場合は、個々の単語のランクを決定し、それによってランク付けします。
$query = " SELECT * FROM scan WHERE ";
$terms = array_map('mysql_real_escape_string', $terms);
$i = 0;
foreach ($terms as $each) {
if ($i++ !== 0){
$query .= " AND ";
}
$query .= "Match(title, description, keywords, link) Against ('".implode(' ',$terms)." IN BOOLEAN MODE') ";
}