私は Solr を初めて使用するので、これが最善の方法かどうかわかりません。
いくつかのカテゴリに分類されるいくつかの製品があります。カテゴリは、次のような階層構造で編成されています。
- Electronics
- Computer
- Apple
- iPads
- Macbooks
- Samsung
- Notebooks
- Photo
- Fashion
- Women
- Men
- Shirts
すべての製品に複数のカテゴリを設定できます。たとえば、製品は と にある可能性がElectronics > Computer > Apple > Macbooks
ありElectronics > Computer > Notebooks
ます。の製品をリストするとElectronics
、すべてのサブカテゴリを含むすべての基本製品が返されます。の製品をリストするとElectronics > Computer
、そのサブカテゴリの製品のみが返されます。
私のショップは Rails にあり、Sunspot を Solr の DSL として使用しています。太陽黒点には、 と を持つ というフィールドcategory_names
がmultiple: true
ありstored: true
ます。このフィールドには、次のように Solr に格納されているルートから最も深いサブカテゴリまで、複数のカテゴリを格納します。
<arr name="category_names_sms">
<str>Electronics</str>
<str>Electronics#Computer</str>
<str>Electronics#Computer#Notebooks</str>
<str>Electronics#Computer#Apple</str>
<str>Electronics#Computer#Apple#Macbooks</str>
</arr>
すべてのカテゴリをファセット検索として取得したい場合は、Solr を で呼び出すだけで、次facet=true&facet.field=category_names
のような sth が返されます
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="taxon_names_sms">
<int name="Electronics">2831</int>
<int name="Electronics#Computer">1988</int>
<int name="Electronics#Computer#Apple">543</int>
...
</lst
</lst
</lst>
特定のカテゴリの製品のみを取得したい場合、Solr を呼び出すとfq=category_names:Electronics
、そのカテゴリのすべての製品が返されます。また、すべての製品にはルート カテゴリへのパスも含まれているため、サブカテゴリからも製品を取得します。
ピボット ファセット、階層ファセットに関する記事をいくつか読みましたが、Solr の機能を正しく使用しているかどうか、少し混乱しています。私の質問は次のとおりです。
- このアプローチは良いものですか?または、想像できる欠点はありますか?クライアント側でカテゴリを分割して解析するためにハッシュタグを使用して
#
いますが、これは私が気に入らない点です。 - もう 1 つの問題は、Solr からカテゴリをフェッチするときに、カテゴリの名前しかないことです。ただし、ID またはカテゴリへのパーマリンクも必要です。そのような情報を Solr に保存する方法はありますか? この情報についてデータベースにアクセスしたくありません。
- この階層カテゴリ全体をより適切に処理する、Solr のビルドイン ソリューションはありますか?
- 現在、sunspot のデフォルトの solr XML 構成のみを使用しています。フィールドの定義などについて読んだことがあります。誰かが私に説明できますか、それを太陽黒点で使用する方法は?
どうもありがとう、誰かが私を正しい方向に押し上げてくれることを願っています。