哪个是在lucene中索引布尔值的最佳选择?

时间:2012-03-12 03:43:19

标签: java lucene

在lucene中索引一个布尔值(true / false)(不需要存储) 我想获得更多的磁盘空间使用和更高的搜索性能

doc.add(new Field("boolean","true",Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS));
//or
doc.add(new Field("boolean","1",Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS));
//or
doc.add(new NumericField("boolean",Integer.MAX_VALUE,Field.Store.NO,true).setIntValue(1));

我应该选择哪个?还是其他更好的方式?

非常感谢

3 个答案:

答案 0 :(得分:10)

一个有趣的问题!

  • 我认为第三个选项(NumericField)不是布尔字段的好选择。我想不出任何用例。
  • Lucene搜索索引(留给一方存储的数据,你还没有使用)存储为倒排索引
  • 保留第一和第二选项(理论上)相同

如果我遇到这种情况,我认为如果影响最终决定,我会选择第一种选择(“真实”和“虚假”)。

我认为您选择NOT_ANALYZED_NO_NORMS看起来不错。

答案 1 :(得分:3)

使用Solr(lucene的一种风格) - 它本地索引所有基本的java类型。

我已经习惯了它并摇滚。

答案 2 :(得分:2)

Lucene跳过一系列精心设计的箍,使NumericField可以通过NumericRangeQuery进行搜索,因此绝对避免使用您的值不代表数量的所有情况。例如,即使您索引一个整数,但仅作为唯一ID,您仍然希望使用普通的String字段。使用“true”/“false”是索引布尔值的最自然方式,而使用“1”/“0”通过避免案例不匹配或拼写错误的可能性给出了一点点优势。我认为这种优势并不值得,而是为了真/假。

相关问题