0

顧客がebuyer.comNewegg.comと同じスタイルでカテゴリと分類を介して製品検索を絞り込むことができるように、ファセット検索ツールが必要な e コマース サイトを作成しています(左側のメニューを参照)。

私は当初、EAV 構造に似たデータベースの設計に飛び込みました (当時はこれが何であるかはわかりませんでした)。最初はこれが理想的でした。無制限のカテゴリ、サブカテゴリ、およびその他の製品分類 (つまり、色、顧客が特定の製品を見つけるために使用できるサイズ、受信者)。しかし、条件を使用して SQL クエリを作成しようと試み始めたとき、AND通常の単純なクエリを記述するのが非常に長く複雑になることに気付きました。

SO のさまざまな投稿や Google の記事を数時間読んだ後、この方法を続けた場合の悪夢に気づきました。

質問

ebuyer.comNewegg.comなどのサイトは、ファセット検索をどのように設計したのでしょうか?

別の方法を見逃したのでしょうか、それとも単純に EAV 構造を採用したのでしょうか? Lucene/Solr のようなエンタープライズ ソリューションは避けたいと考えています。

4

4 に答える 4

3

http://wiki.apache.org/solr/PublicServers

Ebuyer は solr を使用しており、正当な理由により、車輪を再発明するリスクがあります。

于 2014-01-04T03:23:31.103 に答える
2

彼らがどのようにそれを行うのかはわかりませんが、次のようにしてこれを達成できます。

CREATE TABLE  product_facets (
  product_id INTEGER NOT NULL,
  facet VARCHAR(100) NOT NULL,
  facet_value varchar(255) NOT NULL,
  PRIMARY KEY (product_id,facet,facet_value),
  KEY (facet,facet_value)
);

INSERT INTO product_facets VALUES (1, 'COLOR', 'Red');
INSERT INTO product_facets VALUES (1, 'PRICE_RANGE', 'Less than 200');

INSERT INTO product_facets VALUES (2, 'COLOR', 'Green');
INSERT INTO product_facets VALUES (2, 'PRICE_RANGE', 'From $200 to $500');

INSERT INTO product_facets VALUES (2, 'COLOR', 'Blue');
INSERT INTO product_facets VALUES (3, 'PRICE_RANGE', 'More than $1000');

SELECT facet, facet_value, count(*)
FROM   product_facets f
INNER  JOIN products p ON p.product_id = f.product_id
GROUP BY facet, facet_value;

facetは VARCHAR である必要はありません。アプリケーションはそれが何を意味するかを知っているので、単純な INTEGER にすることができます。

于 2011-06-04T03:06:06.093 に答える
1

さて、なぜ Lucene/Solr エンタープライズの賢明なソリューションと呼ぶのでしょうか...私の意見では、あなたのニーズに完全に合っているようです。

于 2010-12-06T09:09:37.533 に答える
0

さまざまな概念が混在していると思います (その結果、解決策を見つけるのが難しくなる可能性があります)。

ファセット検索とは、基本的に「アイテム」の特定の品質によるフィルタリングを意味します。その品質または特性は、それが属するカテゴリである場合もあれば、別のものである場合もあります。

たとえば、年齢でフィルタリングするユーザーのファセット検索を行うことができます。

[    User   ]
| name char |
| age  int  |

Solr (または Sphinx) を調整して最終結果を得る方法はさまざまですが、データ モデルには影響しません。

データベースに表現/保存しようとしているものを概念化/モデル化することから始めます。表示方法や検索方法は後述します。

詳細がないと、他のサイトについての質問designed their faceted searchは広すぎると同時に非常に単純です。製品のさまざまな特性に基づいてさまざまなファセットを生成する必要があるだけです。しかし、情報を格納するためにデータベースをどのようにモデル化したかについても知りたいようです。

于 2012-07-03T21:18:34.980 に答える