0

我是 Solr 的新手,并且正在为我的下一个项目设计一个 solr shema。

我的问题是当与以 CSV 格式保存多值的单个字段相比时,多值字段的优势(效率/执行时间等)是什么。

例如:让我们考虑一个名为 car 的字段。如果我正在设计一个 solr 搜索引擎,那么哪个更好。请忽略模式/文档语法。

<Car>A</Car>
<Car>B</Car>
<Car>C</Car>

或者

<Car> A,B,C</Car>
4

4 回答 4

1

如果该字段有多个值,您可能应该选择多值字段。

多值的东西可以防止错误的匹配。
例如,如果您有一个包含多个作者的文档。AB & CD
如果您将其作为单个字段进行索引,则当您搜索短语匹配“B C”(或带有小斜率)时,它可能会匹配此文档,因为单词会出现在行中。

多值字段将通过适当的位置增量值阻止此类匹配。

此外,多值字段将允许您正确过滤结果。
q=authores:"B C"或者更好,或者使用标签过滤掉结果,这样q=query&fq=authors:"B C"可以利用过滤器缓存并增加查询性能。

于 2012-08-31T07:33:43.843 回答
0

通过使用多值字段,您将拥有更大的灵活性。如果您使用多值字段,您可以按如下方式搜索和过滤具有特定值的结果。

q=car:A or fq=car:A

作为性能,在索引/搜索多值字段和单值字段时应该没有任何区别。

这篇邮件中,他们说多值字段会影响构面性能。

MultiValued 字段始终使用 TermEnum 算法而不是 FieldCache 算法。

TermEnum 适用于字段中有限数量的不同索引术语,并且允许每个文档每个字段有多个术语,而 FieldCache 适用于相对于文档数量的大量索引值,并且每个字段只允许单个术语每个文件。

于 2012-08-31T07:49:04.380 回答
0

基本上,使用 CSV 内容字段,您必须自己标记所有内容才能获得良好的搜索结果。使用多值字段,您将通过 Solr 完成此操作。看一下例子

CSV 字段

<str name="Pet">Dog,Cat</name>

如果您想搜索包含“狗”类型宠物的所有文档,您必须配置您的 CSV 字段类型,以便为您标记文本。因此,您可以分别搜索“狗”或“猫”。

现在有一个多值字段

<arr name="Pet">
<str>Dog</str>
<str>Cat</str>
</arr>

您不需要任何额外的代码来搜索“狗”。

另一点是您不能使用 CSV 字段进行分面。看看http://wiki.apache.org/solr/SimpleFacetParameters

于 2014-01-30T00:50:22.740 回答
0

我认为主要优势是索引的设计。如果将这 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-31T06:57:28.053 回答