検索エンジンを作る

WBOY
リリース: 2016-06-23 14:19:59
オリジナル
2729 人が閲覧しました

検索エンジン php Baidu データベース検索

私の Web サイト内のすべての情報を検索する、Baidu に似た検索 Web サイトを作成するのは PHP です。

この比喩はフォーラム検索で、「A B C」と入力します。間にスペースを入れると、3 つの個別のキーワード A、B、C をフィルタリングして、これら 3 つのキーワードに関連するコンテンツをデータベースで検索できます。これは、Baidu 検索や Google 検索の原理と似ています。

私が考えたいくつかの困難があります:

1. 3 つのキーワードを処理するとき、それらをスペースで区切って 2 つの異なるキーワードに分類するという原則は何ですか? 2 つのキーワードの前に他の記号がある場合はどうなりますか?たとえば、AとBを処理する場合、キーワードはAとBの2つでしょうか?では、A?B についてはどうすればよいでしょうか。キーワードをフィルターで除外するにはどうすればよいでしょうか? ?

2. データベース内を検索するとき、A、AB、ABC という 3 つのキーワードがあります。では、検索ロジックは何でしょうか? A、AB、ABC、A、B、C?これはどういう論理なのでしょうか?ちょっと分からないので百度検索とかしてみたいです。

3. 多くの検索条件 (上記の質問を参照) があり、非常に多くの検索ロジックがある場合、多くの検索ロジックを 1 つの SQL ステートメント (SQL クエリの後に結果の配列を返す) に含める必要がありますか?それとも、ロジックのない単なる SQL ステートメントで、各クエリの結果の配列を返し、それを要約しますか?

ディスカッションへの返信(解決策)

というか、単刀直入に言うと、料理、ラベル、お店、住所などの簡単な情報をまとめた「おいしいものを見つける」ためのサイトを作りたいです。入力したキーワードがラベル、料理名、店名、または複数のキーワードの組み合わせである場合があります。これを実現するにはどうすればよいですか?

そうですね、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 は効率が悪いので使いませんでした

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート