Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子文档是否为solr反模式?_Solr - Fatal编程技术网

子文档是否为solr反模式?

子文档是否为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

我们有一个用例,其中我们存储所有产品数据,每个产品可以存在于300家商店中,并具有特定于商店的数据,如价格、报价等

以下是一份此类示例文件:

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。