検索エンジン php Baidu データベース検索
私の Web サイト内のすべての情報を検索する、Baidu に似た検索 Web サイトを作成するのは PHP です。というか、単刀直入に言うと、料理、ラベル、お店、住所などの簡単な情報をまとめた「おいしいものを見つける」ためのサイトを作りたいです。入力したキーワードがラベル、料理名、店名、または複数のキーワードの組み合わせである場合があります。これを実現するにはどうすればよいですか?
そうですね、thinkphp フレームワークの下で行われました。今私にとって最も難しいのは、フロントエンドのデータ処理とデータベースの SQL ステートメントとロジックを受け取ることです。コードを教えていただければ幸いです。 . そうでない場合は、その原理を説明したいと思います。ありがとうございます
もっとわかりやすく言うと、料理、ラベル、お店、住所などの簡単な情報を含む「食べ物を見つける」ためのWebサイトを作りたいです。タグ、料理名、店名、または複数のキーワードを一緒に入力できますが、どのように実装すればよいですか?
私はそう思います。 SQL ステートメントを 1 つだけ、分割して要約しないでください。非常に面倒です。たとえば、ラベル (一時フィールドは title)、料理名 (dish_name)、店名 (dianming) がある場合、あいまい一致を使用してください。 )、それは次のように書かれています: select * from table_name where title は %Entered キーワード% のようなもの、dish_name は %Entered キーワード% のようなもの、または dianming のような %Entered キーワード% のようなものです。それは私が考えていることです
まず第一に、Baidu、Google、Taobao の検索エンジンのアルゴリズムについて話しましょう。それらはまだ少し複雑です。そうでなければ、専用の職業は存在しません。市場でのSEOに!しかし、Web サイトはおそらくそれほど複雑である必要はありません。私の個人的な意見を言わせてください!
1.A と B はスペースで区切られており、「%A%」のようなインデックス フィールドまたは「%B%」のようなインデックス フィールドの select * from インデックス テーブルを使用するだけで済みます。
A と B は重みを増やすことができます。例:
select * from Index table where Index field like "%A, B%" Union
select * from Index table where Index field like "%A%" or Index field like "%B%"
これは A と一致します前に B ランク、後ろに一致 A または一致 B
2. Union および Order by Weight フィールドに加えて、not、or、and、in などの他の条件ステートメントを使用して、同じ重みが使用されます。特定の重みを分割するのは自分自身です。アルゴリズム、たとえば、タグが 1 番目にランク付けされ、料理が 2 番目にランク付けされます。これは特定のニーズに応じて行われます (一部のキーワードは重要ではなく、頻繁に表示されるため、重み付けは任意に行うことができます)。
3. キーワードが多すぎる場合は、まずキーワードの長さを制限する必要があります (淘宝網にはキーワードの制限もあります)。最初に入力できます。データベース クエリ プログラムを使用して簡単なアルゴリズムを作成し、最初にキーワードを分類してから、それらを SQL ステートメントに入力します。
もちろん、ここで説明する方法はまだ単純な方法ですが、Web サイトが既に非常に大規模でない限り、これでかろうじて十分であると個人的には思います。
フレンドリーなリマインダー: インデックス テーブルを作成してデータベースを最適化する必要があります。そうしないと、応答時間が非常に遅くなります。
一般に、複数のキーワード間の
スペースは or、A B ==> A または B を意味します
プラス記号は AND、A+B ==> A および B を意味します
自分で同意することもできますが、次のことを推奨します。ブール式に従う ルール
変数が多すぎるため、SQL 命令を直接構築することはお勧めできません。変数が 1 つに集中してもう一方が失われてしまいがちです
検索式をブール式にフォーマットできる場合は、次のことが可能です既製のブール式解析プログラムを適用します
1 . 3 つのキーワードを処理する場合、それらをスペースで区切って 2 つの異なるキーワードに分類する原理は何ですか? 2 つのキーワードの前に他の記号がある場合はどうなりますか?たとえば、AとBを処理する場合、キーワードはAとBの2つでしょうか?では、A?B についてはどうすればよいでしょうか。キーワードをフィルターで除外するにはどうすればよいでしょうか? ?
最初の質問は、「Pangu Word Segmentation」と呼ばれる比較的有名なシステムです。さらに、Baidu や Google なども独自の辞書を確立しています。疑わしい
2. データベース内を検索するとき、A、AB、ABC という 3 つのキーワードがあります。では、私の検索ロジックは何でしょうか? A、AB、ABC、A、B、C?これはどういう論理なのでしょうか?ちょっと分からないので百度検索とかしてみたいです。
この部分はより柔軟に開発でき、状況に応じていつでも調整できます
3. 検索条件が多い場合(上記の質問を参照)、検索ロジックが非常に多くなりますが、多くの検索ロジックを 1 つの SQL ステートメントに入れることですか (SQL クエリを実行した後に結果の配列を返す)。それとも、ロジックのない単なる SQL ステートメントで、各クエリの結果の配列を返し、それを要約しますか?
次のように書くことができます
$sql='';
if ($k!=''){
$sql.=" OR Locate("%{$key}%",key)> 0"; }
"select ?? from table where field='value'{$sql}"
ここでは like は効率が悪いので使いませんでした