我是 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
,它会返回类似
<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 功能,我会有点困惑。我的问题是:
- 这种方法是一个好方法吗?或者你能想象到有什么缺点吗?我正在使用
#
主题标签来拆分和解析客户端的类别,这是我不喜欢的一点。 - 另一个问题是,当从 Solr 获取类别时,我只有类别的名称。但我还需要该类别的 ID 或永久链接。有没有办法在 Solr 中存储这些信息?我不想访问数据库以获取此信息。
- 有没有更好的,也许是来自 Solr 的内置解决方案,可以更好地处理整个分层类别的事情?
- 我现在只使用来自 sunspot 的默认 solr XML 配置。我读过关于定义字段和类似的东西。有人可以解释一下,如何将它与黑子一起使用吗?
非常感谢,我希望有人能把我推向正确的方向。