2

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

我想对此字段进行分面搜索(使用SimpleFacetedSearch来自 contrib 包),即我想要每个不同值的命中数。

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

但是,这是要走的路还是有一种特殊的方法可以对 NumericFields 进行分面搜索?

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

4

1 回答 1

0

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

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

于 2013-05-04T09:14:43.383 回答