26

私のeコマースストアにフィルターシステムを設定する(検索を絞り込む)ことを計画しています。ここで例を見ることができます:http://www.bettymills.com/shop/product/find/Air+and+HVAC+Filters

PrestaShop、OpenCart、Magentoなどのプラットフォームには、いわゆるレイヤードナビゲーションがあります。

私の質問は、ファセットナビゲーションにSolrやLuceneなどを使用する場合と比較して、MagentoやPrestaShopなどのプラットフォームのレイヤードナビゲーションの違いは何ですか。

phpとmysqlだけで同様の結果を達成できますか?

詳細な説明をいただければ幸いです。

4

4 に答える 4

52

階層化されたナビゲーション == ファセット検索。

それらは同じものですが、Magento と al はおそらくキャッチーにするために異なる言葉遣いを使用しています。私の知る限り、Magento は Solr ファセット検索と MySQL ファセット検索の両方をサポートしています。主な違いはパフォーマンスです。

パフォーマンスは主なトレードオフです。

MySQL でファセット検索を行うには、テーブルを結合する必要がありますが、Solr はフィルタリングのためにドキュメント ファセットに自動的にインデックスを付けます。通常、Solr を使用すると、平均的なハードウェアで高速な応答時間 (多面的な検索クエリで 100 ミリ秒未満) を実現できます。MySQL は同じ検索に時間がかかりますが、インデックスを使用して最適化すると、同様の応答時間を達成できます。

Solr の欠点は、サーバー上でさらに別のサービスを構成、保護、および実行する必要があることです。また、構成 (Tomcat、jetty など) によっては、かなり CPU とメモリを集中的に使用することもあります。

PHP/MySQL でのファセット検索は可能ですが、思ったほど難しくはありません。

特定のデータベース スキーマが必要ですが、実現可能です。簡単な例を次に示します。

製品

+----+------------+
| id | name       |
+----+------------+
|  1 | blue paint |
|  2 | red paint  |
+----+------------+

分類

+----+----------+
| id | name     |
+----+----------+
|  1 | color    |
|  2 | material |
|  3 | dept     |
+----+----------+

製品分類

+------------+-------------------+-------+
| product_id | classification_id | value |
+------------+-------------------+-------+
|          1 |                 1 | blue  |
|          1 |                 2 | latex |
|          1 |                 3 | paint |
|          1 |                 3 | home  |
|          2 |                 1 | red   |
|          2 |                 2 | latex |
|          2 |                 3 | paint |
|          2 |                 3 | home  |
+------------+-------------------+-------+

たとえば、誰かが を検索するpaintとしたら、次のようにします。

SELECT p.* FROM product p WHERE name LIKE '%paint%';

これにより、テーブルから両方のエントリが返されproductます。

検索が実行されると、次のようなクエリを使用して、結果の関連するファセット (フィルター) を取得できます。

SELECT c.id, c.name, pc.value FROM product p
   LEFT JOIN product_classification pc ON pc.product_id = p.id
   LEFT JOIN classification c ON c.id = pc.classification_id
WHERE p.name LIKE '%paint%'
GROUP BY c.id, pc.value
ORDER BY c.id;

これにより、次のようなものが得られます。

+------+----------+-------+
| id   | name     | value |
+------+----------+-------+
|    1 | color    | blue  |
|    1 | color    | red   |
|    2 | material | latex |
|    3 | dept     | home  |
|    3 | dept     | paint |
+------+----------+-------+

したがって、結果セットには、色がblueおよびの製品がありred、その製品の材料は のみであり、部門およびlatexで見つかることがわかります。homepaint

ユーザーがファセットを選択したら、元の検索クエリを変更するだけです。

SELECT p.* FROM product p
   LEFT JOIN product_classification pc ON pc.product_id = p.id
WHERE 
   p.name LIKE '%paint%' AND (
      (pc.classification_id = 1 AND pc.value = 'blue') OR
      (pc.classification_id = 3 AND pc.value = 'home')
   )
GROUP BY p.id
HAVING COUNT(p.id) = 2;

したがって、ここでユーザーはキーワードを検索してpaintおり、2 つのファセットblue(色のファセットとhome部門のファセット) が含まれています。これにより、次のことが得られます。

+----+------------+
| id | name       |
+----+------------+
|  1 | blue paint |
+----+------------+

では、結論として。これは Solr ですぐに使用できますが、SQL で簡単に実装することができます。

于 2011-08-31T13:49:44.690 に答える
1

Solr ボックスの外では、計算されたファセット、範囲を使用し、ファセットを選択または除外し、ファセットが単一値であるか、非常に低い CPU/RAM コストで複数値であるかを宣言できます。

一方で、solr のインストールをパラメータ化して保護するには時間がかかり、データのクロールにも時間がかかります。

于 2012-05-02T19:44:03.970 に答える
1

Magento Enterprise Edition には、ファセット検索を備えた Solr が実装されています。それでも、正しいデータにインデックスを付けるように Solr を構成する必要があります。つまり、Solr は、特定のポートを持つホスト上の Java で実行されます。Magento は、指定された URL を介して接続します。Magento がファセット検索を設定すると、Solr にリクエストを送信し、受信した xml をフロントエンドのフォームに処理します。違いは速度の 1 つです。Solr へのリクエストは非常に高速です。ショップに約 100,000 以上の商品があり、検索リクエストに迅速に応答したい場合は、Solr を使用できます。それでも、大量のメモリを備えた Magento データベース用の別のサーバーがある場合は、Magento に組み込まれている Mysql ベースのファセット検索を使用することもできます。Magento EE に費やすお金がない場合は、この solr 実装を使用できます. しかし、私はこれについて経験がありません。

于 2011-08-31T13:05:43.783 に答える
0

PHP と MySQL だけでファセット検索を作成できます。Drupal ファセット検索はその良い例です。ただし、すでに Solr を使用している場合は、ファセット検索を無料で利用できます。

于 2011-08-31T13:07:19.053 に答える