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/rdbms,存储附加数据的位置_Solr_Lucene_Rdbms_Solrnet - Fatal编程技术网

Solr/rdbms,存储附加数据的位置

Solr/rdbms,存储附加数据的位置,solr,lucene,rdbms,solrnet,Solr,Lucene,Rdbms,Solrnet,当您需要有关方面结果的其他数据时,什么是最佳实践 例如,我需要一个friendlyname/image/meta关键字/description/和更多。。对于产品类别。(在类别上刻面时) 是否将其包含在文档中?(可能导致大量重复) 在solr中引入category作为新索引(或在solr中通过doctype=category字段伪造) 使用rdbms使用SELECT WHERE IN(…类别方面结果ID…)查找其他数据 谢谢 Remco 使用适合您的数据的快速NoSQL db 顺便说一句,

当您需要有关方面结果的其他数据时,什么是最佳实践

例如,我需要一个friendlyname/image/meta关键字/description/和更多。。对于产品类别。(在类别上刻面时)

  • 是否将其包含在文档中?(可能导致大量重复)
  • 在solr中引入category作为新索引(或在solr中通过doctype=category字段伪造)
  • 使用rdbms使用SELECT WHERE IN(…类别方面结果ID…)查找其他数据
谢谢

Remco

  • 使用适合您的数据的快速NoSQL db
顺便说一句,Solr的底层Lucene实际上也是NoSQL类型的存储设施

如果我是你,我会用MongoDB。这是我想到的第一个db,因为你需要二进制数据,他们实际上发明了BSON,这是现在广泛使用的以类似JSON的方式传输二进制数据的方法


如果您的数据结构更像图形(如社交网络),请查看Neo4j,它有着惊人的快速图形遍历算法。

我会考虑两种选择:

1.)加强每个文档的信息,而不编制索引(以使索引尽可能小)。关键是,我不会存储image insight Lucene/Solr,而只存储一个文件指针

2.)如您所写,将附加数据存储在rdbms或nosql(linke mongoDB)上以进行查找

我最喜欢的是第二个。第一,因为数据库是存储数据的传统且最优化的方式。 但最后,这取决于您的系统,因为您应该记住,连接数据库、搜索数据以及将附加信息发送回应用程序需要时间。 所以在lucene上存储所有东西会更快


可能一个小的性能测试会很有用。

关系数据库可以可靠地执行“类别是第一类实体”的事情。您需要参考完整性:产品可能不属于不存在的类别。已删除的类别不能有其子类别。规范化的RDB可以通过模式强制引用完整性。NoSQL DB必须使用客户端代码(您必须编写)来强制执行引用完整性


让我们看看“产品的类别必须存在”和“子类别的父类别必须存在”是如何完成的:

RDB:为产品分配类别的表(m:n关系)必须通过删除级联上的
键输入产品和类别。如果一个类别被删除,产品就不能有这样一个类别。作为子类别链接到另一个类别的类别:relavent字段在DELETE CASCADE上有一个
。这意味着如果父项被删除,它的子项将不存在。整个方法都是声明性的(“它是这样声明的”),数据中存在着所有的复杂性,我们不需要任何讨厌的代码来为我们做这件事。您可以像理解DB的真实含义一样自然地对DB建模

文档存储类型NoSQL:您需要编写代码来完成所有操作。“类别已删除”是一个用例,您需要找到具有该类别的产品,并更新每个产品。您必须为每个用例编写代码。管理子类别也是如此。数据模型可能非常愚蠢,但它们的真实含义必须在代码中建模。而且它在代码和控制流方面比在数据结构方面更难推理

您是否确实有需要NoSQL数据库的性能需求

因此,请使用RDBMS来管理您的数据。然后使用直接导入处理程序或客户端代码插入/更新非规范化实体以进行搜索。如果对站点的大多数请求都可以用Solr查询表示,那就太好了



关于在Solr中表达层次化方面,请参见“”

也许我错了,但如果您使用的是Solr trunk,您可以从中受益,这将允许您索引多个实体,并在它们之间建立关系,同时对这两个实体强制执行条件。

请量化“大量信息”。您要处理多少个实体?您的数据模型有多复杂?它不是很复杂。这只是更多的数据,然后我想在solr中索引。ie:我有一个索引的产品目录(带有一个多值category_id字段。但是category是系统中的第一类实体),所以我需要category name/url/image/meta data等。Too在category页面上,我目前正在做这个:使用SQL查询当前类别及其子类别。查询solr产品索引,按类别_id划分。使用唯一id将两者相交,以构造一个viewmodel,其中包含来自方面的类别和计数。另一个选项是在索引中存储类别实体。和问题2 solr查询:-一个从类别索引中获取类别/子类别。-一个是从产品索引中获取类别方面。-在唯一id上相交。两者(相交)的一个问题是您无法再计算分页。例如,对于产品列表,我查询产品的solr。然后与数据库相交,查看是否有可用库存。在这种情况下,您将如何处理分页(因为我不想一次从服务器获取太多内容)。我选择solr作为纯搜索/方面索引和sql for data store方法。@Remco Ros>在这种情况下,您将如何处理分页<我将使用偏移量处理solr上的分页。如果solr返回数据库的PK,则不必获取太多。但是,在这种配置下,从数据库中使用“fetch”功能是很困难的。我也很期待。但我们现在必须坚持使用稳定的版本。