我是Solr的新手,正在为我的下一个项目设计solr shema。
我的问题是什么是/是优势(效率/执行时间等)当与CSV格式中包含多值的单个字段进行比较时,多值字段的。
例如:让我们考虑一个名为car的字段。因此,如果我正在设计一个solr搜索引擎,哪一个更好。请忽略schema/doc语法。
<Car>A</Car>
<Car>B</Car>
<Car>C</Car>或
<Car> A,B,C</Car>发布于 2012-08-31 15:33:44
如果该字段有多个值,那么您可能应该使用多值字段。
多值的东西可以防止错误的匹配。
例如,如果您的文档有多个作者。A B&C D
如果您将其作为单个字段进行索引,那么当您搜索短语匹配"B、C“(或具有较小斜率)时,它可能会匹配此文档,因为这些单词将出现在行中。
多值字段将防止这种具有适当位置增量值的匹配。
此外,多值字段将允许您正确过滤结果。
q=authores:"B C"或者更好,或者使用标签过滤出像q=query&fq=authors:"B C"这样的结果,这将利用过滤器缓存并提高查询性能。
发布于 2012-08-31 14:57:28
我认为主要的优势是你的索引的设计。如果您将这3个值放入单个字段中,则此字段表示在搜索1值之后。如果使用多值字段,则会为每个值创建并显示一个新字段。这有什么意义:
想象一下,您想要扩展索引。其中一个新字段的值可能如下所示
<LengthOfCar>5,0</LengthOfCar>如果你现在想要处理给定的结果,你无法分辨哪些值是多值的,哪些不是,因为你用",“将其全部分开。也许对你来说很清楚,但所有其他用户都不会明白这一点。结果将针对单个字段:
<doc>
<str name="Car">A,B,C</str>
</doc>多值字段的结果为:
<doc>
<arr name="Car">
<str>A</str>
<str>B</str>
<str>C</str>
</arr>
</doc>如您所见,多值字段的结果更有意义。在某种程度上,使用它要容易得多(也许您想使用xslt或其他什么)。
根据你关于效率的问题:我不认为在性能和执行时间上会有任何不同。Solr的速度非常快,如果有任何不同,你甚至不会注意到不同之处。
所以我建议你使用多值字段,因为1个字段有3个不同的值。
发布于 2012-08-31 15:49:04
通过使用多值字段,您将拥有更大的灵活性。如果您使用多值字段,您可以搜索并过滤具有特定值的结果,如下所示。
q=car:A or fq=car:A作为性能,在索引/搜索多值字段和单值字段时应该没有任何区别。
在this mail post中,他们说多值字段会影响刻面性能。
MultiValued字段始终使用TermEnum算法,而不是FieldCache算法。
TermEnum适用于该字段中有限数量的不同索引项,并且允许每个文档的每个字段具有多个索引项,而FieldCache适用于相对于文档数量的大量索引值,并且每个文档的每个字段只允许一个索引项。
https://stackoverflow.com/questions/12208769
复制相似问题