【问题标题】:Which is the best choice to indexing a Boolean value in lucene?在 lucene 中索引布尔值的最佳选择是哪个?
【发布时间】:2012-03-12 03:43:18
【问题描述】:

在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));

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

非常感谢

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    一个有趣的问题!

    • 我不认为第三个选项 (NumericField) 是布尔字段的好选择。我想不出任何用例。
    • Lucene 搜索索引(将存储的数据留给一边,但无论如何您都不会使用)存储为倒排索引
    • 让您的第一个和第二个选项(理论上)相同

    如果我遇到这种情况,我想我会选择选项一(“真”和“假”术语),如果它会影响最终决定。

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

    【讨论】:

    【解决方案2】:

    Lucene 跳过了一组精心设计的环节,以使 NumericField 可通过 NumericRangeQuery 进行搜索,因此在您的值不代表数量的所有情况下,请务必避免使用它。例如,即使您索引一个整数,但仅作为唯一 ID,您仍然希望使用纯字符串字段。使用 "true"/"false" 是索引布尔值的最自然方式,而使用 "1"/"0" 通过避免大小写不匹配或拼写错误的可能性仅提供了一点优势。我会说这个优势不值钱,是真/假。

    【讨论】:

    【解决方案3】:

    使用 Solr(一种 lucene 风格)- 它对所有基本的 java 类型进行原生索引。

    我用过它,它摇摆不定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多