2012-03-27 2 views
0

をneeeded:高度な検索アーキテクチャのアドバイスは、私は次の基準のいずれかまたはすべてで検索すべき項目の完全なデータベースを持っている

item_id, supplier, price range, color 

、それは簡単です - チェックボックスのユーザの選択が掲載され、そしてI適切なクエリに変換します。

質問:検索が動的に変更されるようにする方法。つまり、ある価格帯を選択すると、それに適合しないすべてのサプライヤーと色が選択から除外され、選択された項目も選択解除されます。

同様に、ユーザーが特定の色をチェックすると、それを提供していないすべてのサプライヤーと、それを持たないすべての価格帯が選択から除外されます。また、ユーザが以前に選択したかもしれないが、その色ではないすべてのアイテム。

サブ質問:これはまったく良いアイデアです。あなたがそれに反対している場合は、私にその理由を教えてください。

注:アーキテクチャーアドバイスは、私が必要としているアプローチ、それへのアプローチ、そして答えは高く評価されています。私は2日間この頭を叩いています。

コードは拒否されず、任意の言語または擬似コードでもかまいません。私はここで考え方を解読する必要があります。

EDIT:ここでは一例です - 左側の検索条件のいずれかをクリックすることで、検索結果に影響を与える:あなたは、ファセットについて尋ねているよう

http://www.wanajob.com/emploi?search=informatique&fpc=&fpr=

答えて

1

私はファセットの専門家ではないので、私はその方向でブレントの答えを延期しますが、基本的な検索データ用にMySQLで実装するのは簡単です。

「赤」の色を顧客が検索したとします。あなたは、これらの2つのフィールドのすべてのDISTINCTの組み合わせを返します

SELECT DISTINCT supplier,price_range FROM items WHERE color = 'red'; 

として別々のクエリでなければならないであろうことを、この

SELECT DISTINCT supplier FROM items WHERE color = 'red'; 
SELECT DISTINCT price_range FROM items WHERE color = 'red'; 

ノートのような検索結果内サプライヤーとの価格範囲のリストを構築することができ。

あなたがそれぞれの基準のCOUNTが必要な場合は、あなたが私のために全く新しい地平を開くための

SELECT supplier,COUNT(*) FROM items WHERE color = 'red' GROUP BY supplier; 
SELECT price_range,COUNT(*) FROM items WHERE color = 'red' GROUP BY price_range; 
2

は思えます。ファセットはあなたが求めているものの反対ですが、それは反対であるため、削除するものを推測することができます。ファセットは検索中にX青、Y赤、およびZ黄色の項目があることを伝えます。したがって、これらの色のいずれかで検索を絞り込んだ場合、新しい検索結果に表示されるアイテムの数がわかります。これはウェブ上で、特にショッピングサイトではかなり一般的です。だから、たくさんの例がある。

Solr、Elastic Search、Sphinxなどの検索システムは、ファセット情報を提供します。 MySQLはしません。 Solrは最も成熟した、Elastic Searchはおそらく最もスケーラブルであり、Sphinxはmysqlから直接読むことができます。

+0

1のGROUP BYを使用することができますが、切子面について知りませんでした。ありがとう。 – CodeVirtuoso

関連する問題