2012-03-02 3 views
2

私はautoscout24.deの検索エンジンの実装に興味があります。それはあなたが車を売る/買うことができるプラットフォームです。すべての車の広告には、検索可能なメール、価格、キロメートル、色など(合計50種類以上のプロパティ)のプロパティがあります。autoscout24.deのように/ SQLを使わずに車の検索を行うには?

私はこのような詳細検索に特に興味があります:すべての可能なプロパティがページに表示されます。各プロパティの後ろにある括弧には、プロパティが選択されている場合に新しい検索と一致する車の数があります。

:空の検索基準から始めます。

プロパティます

  • BMW(100.000)
  • フォルクスワーゲン(200.000)
  • フォード(150.000)
  • ...

プロパティの色:

  • ブラック(210.000)
  • 銀(50.000)
  • 白色
  • (100.000)
  • ...

など他の特性のために。

私が知りたいのです:

  • どのようにSQLでの検索のこの種を実装するのでしょうか?
  • インメモリのデータ構造でどのように実装しますか?

    括弧内の数字はを添加した後に結果の数を示しています

  • 範囲クエリは、(XからYへの価格ですべての車)

更新もサポートする必要があります検索基準。だから、それはとても素朴なアルゴリズムは次のように動作します...

をプロパティが削除/追加されるたびに変更します。

  • (例えばフォードを作る)、現在の検索条件ですべての車を見つけますプロパティdo:以前の検索条件( "Ford")と一致するすべての自動車と、選択したプロパティの検索条件を検索します。プロパティの後ろに角かっこで数を書いてください。

このアルゴリズムは1 + N個のクエリ(N =#プロパティ)を実行するので、単純です。誰もが;-)

+0

このウェブサイトのデータベースにアクセスできますか?そうでない場合は、ウェブサイトから_大量のデータを取り出す予定ですか?彼らはAPIを提供していますか?これは仮説的な質問ですか? – jwueller

+0

@elusive:私はそのウェブサイトのデータベースにアクセスできません。そして、私はデータを掻き集めたくありません。私は同様のデータベースを構築したいが、異なるデータ(車なし)で構築したい。 – Marcel

答えて

-1

は、プロパティテーブルを持っていることをやりたいん:

+プロパティ

  • ID
  • タイトル
  • を値

数フィールドで余分なクエリを「獲得」することができますあなたが新しい車を追加するときに、このフィールドを更新することができます。このテーブルの行の

例:

1 '色' 'ブラック' '白' 1000

2 '色' 122

3 'キロ '5000' 1233

各小道具のための

4 'キロ' '30000' 54

や車のテーブルについて、 ertyフィールドを追加します。

+車

  • ID
  • キロ

とProperiesテーブルのプロパティの行のIDを保持するカラーおよびKMフィールド。

EDIT:mysql dbを使用しない場合は、XMLファイルを使用してプロパティデータを含めることを検討することがあります。しかし、もう一度、車を追加/削除または更新するたびに、count値を更新する必要があります。

<Properties> 
<Property> 
    <Type>Color</Type> 
    <Value>White</Value> 
    <Count>1000</Count> 
</Property> 
</Properties> 
+0

"更新"セクションを追加しました。クエリは非常に動的です。 1つのプロパティが追加されると(AND演算子)、すべてのカウントが変更されます。どのようにそれを効率的にクエリしますか? – Marcel

+0

車を追加/更新/削除するときにのみ更新します。 人がプロパティページに入る回数と比較すると、すべてのプロパティのうちの「COUNT」を取得する必要があります。 –

1

これは「faceted search」と言います。 Apache Solrプロジェクトは見て価値があるかもしれません。

+0

ボキャブラリー "ファセット検索"に感謝します! – Marcel

0

それは、その後の各1つを追加し、車がフィルタに一致した場合、車は

  • チェック1ですべての車1を持つプロパティごとに1つのカウンターで結果オブジェクトを作成し、基本的なコード

    • です数字

    ...しかし、それは速い爆破です!

    私は彼らがいくつかのコンピュータでそれをして、それらの間にデータを散らしていると思います。各コンピュータはデータの5%を計算し、その結果をフロントコンピュータに送信します。

    「map reduce」、「elastic search」、「strom」を検索するツールがあります。

  • 関連する問題