使用逗号分隔的ID字符串与多值字段

时间:2014-12-04 10:09:39

标签: solr

在我的项目中,我通过将文档存储在逗号分隔的字段中来创建文档之间的关系,例如:relatedDocIds="2455,4564,7345"这些关系通过使用贯穿我的计划作业不时更新DB,获取记录,并更新其Solr文档。

我知道不是使用单个以逗号分隔的字符串字段,而是使用multiValued字符串,其中每个ID可以占用一个值槽。由于我的客户端API的一些限制,我现在只能为每个字段设置一个值。我没有看到以我的方式使用它的任何缺点,即查询,例如relatedDocIds:2455完全按照我希望的方式解析。 multiValued的文档说它做了同样的事情。

我是否错过了使用multiValued的潜在优势?我的方法可以,它有什么限制?存储这些ID的更好,更优化的方法是什么?

1 个答案:

答案 0 :(得分:0)

你很好。在封面下,multiValued字段的索引形式将转换为一组标记,就像您的标记生成器使用该特定标记化程序规则拆分它们一样。

主要区别在于multiValued字段假装一个值的结束标记和另一个值的开始标记彼此相距很远。这就是 positionIncrementGap 的含义(通常为100)。

如果你想做一个像“2455,4564”这样的短语搜索,这很重要。在你的情况下,我相信,它会匹配,但如果你把它们作为multiValued字段,每个值分开,它就不会。

当然,multiValued字段(如果存储)将作为值数组返回。字符串 - 如果存储 - 在给定时返回,即使索引版本已全部分解为标记。