如何在 Lucene 3.0.1 中索引 BigDecimal 值

发布于 2024-08-30 19:07:05 字数 183 浏览 7 评论 0原文

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

您如何存储 BigDecimals?有什么最佳实践可以分享吗?

I have some BigDecimal values which should be indexed for searching. Lucene has NumericField but it has setters only for long, double, float and int. I could store it as a String but then I would not benefit from NumericRangeQuery.

How you have stored your BigDecimals? Any best practices to share?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

左岸枫 2024-09-06 19:07:05

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

数据的存储很简单,甚至NumericField 将其存储在 String 中 来自 javadoc:

注意:此类仅在索引期间使用。当从中检索存储的字段值时
搜索后的 Document 实例,您将得到一个传统的 Fieldable 实例,其中
数值以字符串形式返回(根据所用数据类型的 toString(value))。

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

If everything else fails, considering extending AbstractField (similar to how NumericField extends it), TokenStream (similar to how NumericTokenStream extends it) and MultitermQuery (similar to how NumericRangeQuery extends it). All of three Numeric* classes are unfortunately final so they cannot be extended on their own :( The good news is that logic in these classes is fairly trivial and it should be easy to retrofit this for BigDecimals.

The storing of data is trivial as even NumericField stores it in a String. From the javadoc:

NOTE: This class is only used during indexing. When retrieving the stored field value from
a Document instance after search, you will get a conventional Fieldable instance where the
numeric values are returned as Strings (according to toString(value) of the used data type).

If you'll go that route, try sending patch to Lucene developers or at least fill a JIRA request. Lucene devs are generally nice and open people so this could benefit others, too.

故事未完 2024-09-06 19:07:05

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

Steven Rowe provides interesting ideas in this post:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#2502f96055839c3d

He says that his scheme could probably be used to represent all BigDecimal values. It seems easier to implement if you don't need negative values. Like mindas suggested, you could extend AbstractField to implement this.

There is also Yonik Seeley who says he has started some work in Solr for that with the class BCDUtils:
http://www.lucidimagination.com/search/document/ad648772f8825a28/bigdecimal_values#cef1d0e25af063ef

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文