子文档是否为solr反模式?
我们有一个用例,其中我们存储所有产品数据,每个产品可以存在于300家商店中,并具有特定于商店的数据,如价格、报价等 以下是一份此类示例文件:子文档是否为solr反模式?,solr,Solr,我们有一个用例,其中我们存储所有产品数据,每个产品可以存在于300家商店中,并具有特定于商店的数据,如价格、报价等 以下是一份此类示例文件: Catalog data Doc: { "sku_id":"1231", "display_name":"spinach", "size":"250g", ..... ..... ... more other 15-20 fields } Store data doc: { "store_id":"1", "sku_i
Catalog data Doc:
{
"sku_id":"1231",
"display_name":"spinach",
"size":"250g",
.....
.....
... more other 15-20 fields
}
Store data doc:
{
"store_id":"1",
"sku_id": "1231",
"price":2,
..... another 5-6 fields
}
我们将这些文档建模为Solr中的父子关系。其中,目录数据将是我们的父项,300个特定于存储的数据将是我们的子项
我们将在storeprice
字段中执行范围过滤器查询,该字段也将用于刻面/排序。不会在存储(子项)
文档上进行任何搜索
最近,我们被告知子文档是一种反模式
(背后没有任何理由:))
如果我们展平文档,问题是,我们最终会在父(目录)文档中创建许多动态字段
我们知道一个限制,即父子关系中的就地更新,更新子关系中的一个字段需要替换整个块。我们已经编写了一个插件,负责在Solr中完成这项工作
我想知道在solr中使用子文档与使用动态字段的优缺点我不确定是否会将父-子文档称为solr中的反模式,但这肯定不是在solr中操作的首选方式。由于Solr的大部分操作都是在平面结构上进行的,因此在文档中散布重复数据是完全正常的。这样做的理由是:(1)它使搜索执行更快,因为没有额外的工作来查找相关数据;(2)假设您在其他地方(如关系数据库)对数据进行了规范化执行事务,然后将平面版本再次推送到Solr。我不确定在Solr中是否会将父-子文档称为反模式,但这肯定不是在Solr中操作的首选方式。由于Solr的大部分操作都是在平面结构上进行的,因此在文档中散布重复数据是完全正常的。这样做的理由是:(1)它使搜索执行得更快,因为没有额外的工作来查找相关数据;(2)假设您在其他地方(如关系数据库)对数据进行了规范化,在那里执行事务,然后将平面版本再次推送到Solr。