2014-12-04 12 views
0

在我的项目中,我通过将它们存储在逗号分隔的字段中来创建文档之间的关系,例如:relatedDocIds="2455,4564,7345"这些关系会不时更新使用通过我的数据库运行的计划作业,获取记录并更新其Solr文档。使用用逗号分隔的ID字符串与多值字段

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

我错过了使用multiValued的潜在优势吗?我的方法是否可行?它的局限性是什么?什么是更好和更优化的方法来存储这些ID?

回答

0

你很好。在封面下,multiValued字段的索引形式被转换为一组标记,就像您的标记器使用特定标记器的规则分割它们一样。

主要区别在于multiValued字段假定一个值的结束标记和另一个值的开始标记彼此远离。这就是positionIncrementGap意味着(通常是100)。

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

而且,当然,multiValued字段(如果存储)作为值数组返回。字符串 - 如果存储 - 会按照给定的方式返回,即使索引版本已全部分解为令牌。