我是Solr的新手,也是我为下一个项目设计solr shema的过程。
我的问题是,当以CSV格式保存多个字段的单个字段时,多值字段的优点(效率/执行时间等)是什么。
例如:让我们考虑一个叫做汽车的领域。如果我正在设计一个solr搜索引擎,哪一个更好。请忽略schema / doc语法。
<Car>A</Car>
<Car>B</Car>
<Car>C</Car>
OR
<Car> A,B,C</Car>
答案 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