Java 在lucene中索引布尔值的最佳选择是什么?

Java 在lucene中索引布尔值的最佳选择是什么?,java,lucene,Java,Lucene,为lucene中的布尔值(真/假)编制索引(不需要存储) 我希望获得更多的磁盘空间使用率和更高的搜索性能 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 Nume

为lucene中的布尔值(真/假)编制索引(不需要存储) 我希望获得更多的磁盘空间使用率和更高的搜索性能

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));
我应该选择哪一个?还是其他更好的方法


非常感谢

一个有趣的问题

  • 我不认为第三个选项(NumericField)是布尔字段的好选择。我想不出这方面的任何用例
  • Lucene搜索索引(将存储的数据放在一边,您无论如何都不会使用这些数据)存储为反向索引
  • 让你的第一个和第二个选择(理论上)相同
如果我面对这种情况,我想我会选择选项一(“正确”和“错误”术语),如果它影响最终决定的话


我认为,您选择的
未分析\u无规范
看起来不错。

Lucene跳过了一系列复杂的限制,使NumericRangeQuery可以搜索NumericField,因此绝对避免所有您的值不代表数量的情况。例如,即使索引一个整数,但仅作为唯一ID,您仍然希望使用普通字符串字段。使用“true”/“false”是对布尔值进行索引的最自然的方法,而使用“1”/“0”由于避免了大小写不匹配或键入错误的可能性,只提供了一点优势。我想说,这一优势没有多大价值,只能说是真是假。

使用(lucene的一种风格)-它以本机方式索引所有基本java类型


我用过它,而且它很结实。

嗨,@adrian conlon,你能帮我吗?非常感谢除了NumericRangeQuery之外,请记住NumericField的另一个好处:NumericField非常适合排序,因为构建字段缓存比使用纯文本数字快得多。资料来源: