处理货币和汇率
currency 字段类型给 Solr/Lucene 提供了包含查询时货币转换和汇率在内的金融值。
它支持以下特性:
- 点查询
- 范围查询
- 函数范围查询
- 排序
- 根据货币编码或符号的货币解析
- 对称和非对称汇率(非对称汇率对存在货币转换税率的场景很有用)
配置货币
currency 字段类型定义在 schema.xml 中。
下面是该类型的默认配置:
<fieldType name="currency" class="solr.CurrencyField" precisionStep="8"defaultCurrency="USD" currencyConfig="currency.xml" />
本例中,我们定义了名称和字段类型的类,并且定义了 defaultCurrency 为 USD,及美元。
我们也定义了一个 currencyConfig 来使用一个称为 currency.xml 的文件。
它是一个包含我们的默认货币和其他货币之间的汇率的文件。
还有一个替代实现允许周期地下载货币数据。详见下文 汇率
在索引时,金钱字段可以原生的货币进行索引。
如,一个欧洲电商网站上的某个产品,将其价格字段索引为 1000,EUR 能正确地索引。
其价格和货币之间应该有一个逗号隔开,且价格必须以浮点值编码 (小数点)。
在查询处理中,范围和点查询都支持。
汇率
你可以通过指定一个提供商来配置汇率。
原生的支持两种类型的提供商: FileExchangeRateProvider 或 OpenExchangeRatesOrgProvider。
FileExchangeRateProvider
这个提供商需要你提供一个汇率文件。
它是默认的,即使用它,你只需要指定文件路径和名称作为该类型定义中 currencyConfig 的值即可。
在 Solr 中包含了一个示例 currency.xml,可在 schema.xml 文件相同的目录下找到。
以下是该文件的小片段:
<currencyConfig version="1.0"><rates><!-- Updated from http://www.exchangerate.com/ at 2011-09-27 --><rate from="USD" to="ARS" rate="4.333871" comment="ARGENTINA Peso" /><rate from="USD" to="AUD" rate="1.025768" comment="AUSTRALIA Dollar" /><rate from="USD" to="EUR" rate="0.743676" comment="European Euro" /><rate from="USD" to="CAD" rate="1.030815" comment="CANADA Dollar" /><!-- Cross-rates for some common currencies --><rate from="EUR" to="GBP" rate="0.869914" /><rate from="EUR" to="NOK" rate="7.800095" /><rate from="GBP" to="NOK" rate="8.966508" /><!-- Asymmetrical rates --><rate from="EUR" to="USD" rate="0.5" /></rates></currencyConfig>
OpenExchangeRatesOrgProvider
你可以配置 Solr 从 http://www.OpenExchangeRates.Org 下载汇率, 它每个小时都会更新美元和 158 种货币的汇率。这些汇率只是对称的。
这里,你需要在字段类型的定义中指定 providerClass。如下例:
<fieldType name="currency" class="solr.CurrencyField" precisionStep="8"providerClass="solr.OpenExchangeRatesOrgProvider"refreshInterval="60"ratesFileLocation="http://www.openexchangerates.org/api/latest.json?app_id=yourPersonalAppIdKey"/>
其中 refreshInterval 是分钟,因此上述示例将每 60 分钟下载一次最新的汇率。
其刷新间隔可以加快,而不能减慢。
