【问题标题】:Store category information in Solr在 Solr 中存储类别信息
【发布时间】:2016-01-18 21:45:09
【问题描述】:

我的 solr 数据库中存储了产品信息。一个产品可以是多个类别的一部分。

现在,我想在属于这些类别的产品中存储有关这些类别的信息。 (还有其他方法吗?)

假设产品 A 属于类别 C1 和 C2,ID 为 I1 和 I2。现在如何将 I1 到 C1 的映射存储在我的产品 A 中?这样做的架构应该是什么?

但是,如果简单地存储 id、名称和一些其他数据(例如 url)的列表,那么每个 id 到名称或 url 的映射将丢失。像这样:

<field name="category_ids" type="tints" indexed="true" stored="true"/>
<field name="category_names" type="strings" indexed="true" stored="true"/>

那么我应该如何存储文档呢?

【问题讨论】:

  • 实际上,一个更好的问题是您将如何搜索这些文档,然后为其设计索引。
  • 搜索仍然可以在将与映射一起维护的 ids/name 列表中进行。但是现在,不需要添加任何新字段,因为将保留多值字段中的添加顺序。这将自动将 id 映射到各个字段中的信息。

标签: solr schema product categories solr5


【解决方案1】:

您描述的方式有效 - Solr 将保持字段之间的顺序相同,因此您可以假设字段category_ids 中的第一个值对应于字段category_names 中的第一个值。我们使用它来索引多个多值字段中更复杂的对象。

第二种解决方案是使用类别 id 在您的中间件中查找实际的类别信息,查询数据库以获取相关信息。如果名称更改,这将避免必须重新索引某个类别的所有文档(除非您使用该名称进行查询,这将要求您进行重新索引,无论选择何种解决方案)。

第三种解决方案是让一个字段同时包含 id 和序列化形式的名称,例如 3;Laptops 或 JSON,并且只存储该字段而不对其进行索引(并使用索引的非存储字段用于实际搜索)。

您也可以将子文档用于这样的事情,但我个人认为这会给您带来相当多的不必要的复杂性。

【讨论】:

  • 订单是否始终有保障?你能给我指出一些说明这一点的 solr 文档吗?是的,我虽然使用子文档但放弃了它,因为它会使系统变得不必要的复杂。如果必须以这种方式完成,那么它可以在中间件处更好地处理。
  • 是的,订单有保证。自 2008 年 IIRC 以来,我们一直在生产中这样做。我能找到的最好的是this mail thread 关于这个问题。
  • 酷。这将简化很多事情。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多