【问题标题】:How to index BigDecimal values in Lucene 3.0.1如何在 Lucene 3.0.1 中索引 BigDecimal 值
【发布时间】:2011-02-13 09:13:48
【问题描述】:

我有一些 BigDecimal 值应该被索引以进行搜索。 Lucene 有 NumericField,但它只有 long、double、float 和 int 的设置器。我可以将它存储为字符串,但我不会从 NumericRangeQuery 中受益。

您是如何存储 BigDecimal 的?有什么最佳做法可以分享吗?

【问题讨论】:

    标签: java indexing lucene search-engine bigdecimal


    【解决方案1】:

    如果其他一切都失败了,考虑扩展AbstractField(类似于NumericField 的扩展方式)、TokenStream(类似于NumericTokenStream 的扩展方式)和MultitermQuery(类似于NumericRangeQuery 的扩展方式) )。不幸的是,所有三个 Numeric* 类都是最终类,因此它们无法自行扩展 :( 好消息是这些类中的逻辑相当简单,应该很容易为 BigDecimals 进行改进。

    数据的存储是微不足道的,因为即使NumericField 将其存储在字符串中。来自 javadoc:

    注意:此类仅在索引期间使用。从以下位置检索存储的字段值时 搜索后的 Document 实例,您将获得一个常规的 Fieldable 实例,其中 数值作为字符串返回(根据所用数据类型的 toString(value))。

    如果您要走这条路,请尝试向 Lucene 开发人员发送补丁或至少填写 JIRA 请求。 Lucene 开发人员通常都是友善且开放的人,因此这也可以使其他人受益。

    【讨论】:

      【解决方案2】:

      Steven Rowe 在这篇文章中提供了有趣的想法:
      http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#2502f96055839c3d

      他说他的方案可能可以用来表示所有 BigDecimal 值。如果您不需要负值,它似乎更容易实现。就像 mindas 建议的那样,您可以扩展 AbstractField 来实现它。

      还有 Yonik Seeley 说他已经开始在 Solr 中使用 BCDUtils 类进行一些工作:
      http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#cef1d0e25af063ef

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        • 2011-02-05
        • 2011-01-21
        • 2011-01-19
        • 1970-01-01
        相关资源
        最近更新 更多