在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));
我应该选择哪个?还是其他更好的方式?
非常感谢
答案 0 :(得分:10)
一个有趣的问题!
如果我遇到这种情况,我认为如果影响最终决定,我会选择第一种选择(“真实”和“虚假”)。
我认为您选择NOT_ANALYZED_NO_NORMS
看起来不错。
答案 1 :(得分:3)
使用Solr(lucene的一种风格) - 它本地索引所有基本的java类型。
我已经习惯了它并摇滚。
答案 2 :(得分:2)
Lucene跳过一系列精心设计的箍,使NumericField可以通过NumericRangeQuery进行搜索,因此绝对避免使用您的值不代表数量的所有情况。例如,即使您索引一个整数,但仅作为唯一ID,您仍然希望使用普通的String字段。使用“true”/“false”是索引布尔值的最自然方式,而使用“1”/“0”通过避免案例不匹配或拼写错误的可能性给出了一点点优势。我认为这种优势并不值得,而是为了真/假。