在solr搜索中,单个CSV字段的多值字段的优势是什么?

时间:2012-08-31 04:08:15

标签: solr

我是Solr的新手,也是我为下一个项目设计solr shema的过程。

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

例如:让我们考虑一个叫做汽车的领域。如果我正在设计一个solr搜索引擎,哪一个更好。请忽略schema / doc语法。

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

OR

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

4 个答案:

答案 0 :(得分:1)

如果该字段有多个值,则应该选择多值字段。

多种东西可以防止错误的匹配 例如如果您有一个包含多位作者的文档。一个B&amp; C D
如果您将其索引为单个字段,则当您搜索短语匹配“B C”(或使用小斜率)时,它可能会匹配此文档,因为单词将显示在行中。

多值字段将使用正确的位置增量值来阻止此类匹配。

此外,多值字段可让您正确过滤结果 q=authores:"B C"或更好或使用标记过滤掉q=query&fq=authors:"B C"之类的结果,这些结果将利用过滤器缓存并添加到查询性能中。

答案 1 :(得分: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个不同的值。

答案 2 :(得分:0)

通过使用多值字段,您将获得更多灵活性。如果使用多值字段,则可以使用特定值搜索和过滤结果,如下所示。

q=car:A or fq=car:A

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

this mail post中,他们说多值字段会影响方面的表现。

  

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

     

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

答案 3 :(得分: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