有没有一种特殊的方法在Lucene的数字字段上进行分面?

时间:2013-04-18 12:54:14

标签: lucene lucene.net faceted-search

在使用Lucene.Net的应用程序中,我有一个存储整数的数字字段。值的基数相当低(通常小于20-30个不同的值)。

我想对这个字段进行分面搜索(使用contrib包中的SimpleFacetedSearch),也就是说我想要每个不同值的点击次数。

目前我正在将值的副本存储在附加文本字段中,并在此文本字段上运行分面搜索。这将返回正确的结果。

然而,这是要走的路还是有一种特殊的方法来对NumericField进行分面搜索?

注意:由于基数较低,我可能会考虑将precision-step设置为int.MaxValue,以便每个值只有一个术语。我想在那种情况下,我可以简单地对数字字段本身进行分面搜索,并使用NumericUtils.PrefixCodedToInt()手动解码值。这是正确的还是会出现并发症?到目前为止,我的测试表明它运行良好。

1 个答案:

答案 0 :(得分:0)

将facet的值存储在单独的字段中听起来很合理。数字字段可以被认为是修改后的值,就像字符串字段可能具有词干和同义词扩展应用于它们一样。在这些情况下,一个用于搜索的字段和一个用于facet的字段是可以的。

您可以计算受损区域上的构面(由NumericField生成),并在您描述时调用PrefixCodedToInt,并得到相同的结果。这将减少索引大小(无需存储数值,或单独索引)。它还可以减少io负载,因为你可以从术语索引中读取值而不是在硬盘驱动器上查找文档,但这在很大程度上取决于索引大小,文件系统缓存等。