【发布时间】:2011-12-30 08:45:58
【问题描述】:
刚刚编译了一些关于模式的基本 solr 问题。
我的情况:以前有一个多核的 solr 实例,每个核包含不同的文档结构。尽管一个核心中文档中的信息与其他不同核心中的文档相关,但特定的法律限制迫使我们将这些数据分散在独立的实例中。因此,每次向 solr 实例发出请求时,都会查询几个核心,客户端应用程序“合并”并构建几个独立核心的响应。为了举例说明:假设我们是一家音乐商店,听起来很愚蠢,我们有一个用于 CD 的核心、一个用于 DVD 的核心、一个用于磁带的核心等,每个都有自己不同的架构;然后当员工检查库存时,所有这些核心都会返回他们的响应,让员工计算机中的应用程序读取、处理不同的结构,并将结果呈现为一个统一的列表。
好吧,法律限制已经解除,我们现在将核心合并在一起,到目前为止,很大程度上依赖于 dynamicFields 来实现架构灵活性。然而,这带来了许多全新的挑战和一些疑问:
1 - 更好的是:减少文档的数量,每个文档都有大量的字段(我们说的是数百个,有时这里或那里有一千个,全部编入索引),还是将信息分散在几个小型文档中?从理论上我一直在阅读的内容来看,第一种方法是可取的,但我不认为任何案例都考虑了这么多的字段。
2 - 是否可以执行任何类型的关系搜索?我的意思是拥有以下文件:
<doc>
<ID>ALB@1234</ID>
<artist_t>Metallica</artist>
<album_t>Saint Anger</album>
</doc>
<doc>
<ID>PROD@12</ID>
<AlbID>ALB@1234</AlbID>
<format_t>CD</format_t>
<price_m>8.99</price_m>
</doc>
<doc>
<ID>PROD@13</ID>
<AlbID>ALB@1234</AlbID>
<format_t>MP3</format_t>
<price_m>3.99</price_m>
</doc>
然后在执行对 Metallica 的搜索时,是否已检索到所有三个文档?请记住,将最后两个文档的信息作为多值存储在第一个文档中的方法并不是一个真正的选择,因为据我所知,没有办法 p.e.按价格检索与范围搜索匹配的正确格式。
3 - 或者,是否可以将某种子文档结构定义为文档的一部分,就像在多级文档中一样?同样,我在这里不是指 poly 或 multiValued 字段,因为据我所知,它们不适合更复杂和结构化的信息。曾是 考虑以下内容:
<doc>
<ID>ALB@1234</ID>
<artist_t>Metallica</artist>
<album_t>Saint Anger</album>
<formats>
<format_x><ID>PROD@13</ID><AlbID>ALB@1234</AlbID><format_t>MP3</format_t><price_m>3.99</price_m></format_x>
<format_x><ID>PROD@12</ID><AlbID>ALB@1234</AlbID><format_t>CD</format_t><price_m>8.99</price_m></format_x>
</formats>
</doc>
4 - 一个考虑:当然,这种情况可以通过像 2) 中描述的那样对模式进行建模并对服务器执行多个查询来解决,但这并不是最理想的解决方案。
期待任何意见或建议。抨击不太受欢迎,但仍然可以接受,对我放轻松。 ;) 如果这些问题听起来很愚蠢,但在这里确实需要一些帮助,我很抱歉。
【问题讨论】: