货币和汇率
currency
FieldType 为 Solr 提供对货币值的支持,具有查询时的货币转换和汇率功能。支持以下功能:
-
点查询
-
范围查询
-
函数范围查询
-
排序
-
通过货币代码或符号进行货币解析
-
对称和非对称汇率(如果兑换货币涉及费用,则非对称汇率非常有用)
-
范围分面(使用
facet.range
或json.facet
中的type:range
),只要start
和end
值以相同的货币指定。
配置货币
CurrencyField 已被弃用
CurrencyField 已被弃用,建议使用 CurrencyFieldType;以下所有配置示例都使用 CurrencyFieldType。 |
currency
字段类型在模式中定义。这是此类型的默认配置。
<fieldType name="currency" class="solr.CurrencyFieldType"
amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
defaultCurrency="USD" currencyConfig="currency.xml" />
在此示例中,我们定义了字段类型的名称和类,并将 defaultCurrency
定义为 "USD",即美元。我们还定义了一个 currencyConfig
以使用名为 "currency.xml" 的文件。这是一个从我们的默认货币到其他货币的汇率文件。还有一种替代实现方式允许定期下载货币数据。请参阅下面的汇率了解更多信息。
许多 Solr 附带的示例模式都包含一个使用此类型的动态字段,例如此示例
<dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
此动态字段将匹配任何以 _c
结尾的字段,并使其成为货币类型的字段。
在索引时,货币字段可以以本地货币进行索引。例如,如果电子商务网站上的产品以欧元列出,则将价格字段索引为 "1000,EUR" 将正确索引它。价格应与货币用逗号分隔,并且价格必须使用浮点值(小数点)进行编码。
在查询处理期间,范围查询和点查询都支持。
子字段后缀
您必须指定参数 amountLongSuffix
和 codeStrSuffix
,分别对应于用于原始金额和货币动态子字段的动态字段,例如
<fieldType name="currency" class="solr.CurrencyFieldType"
amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
defaultCurrency="USD" currencyConfig="currency.xml" />
在上面的例子中,原始金额字段将使用 "*_l_ns"
动态字段,该字段必须存在于模式中,并且使用 long 字段类型,即扩展 LongValueFieldType
的类型。货币代码字段将使用 "*_s_ns"
动态字段,该字段必须存在于模式中,并且使用 string 字段类型,即是或扩展 StrField
的类型。
如果存储了动态子字段,原子更新将无法工作
正如原子更新字段存储中所述,当您使用原子更新时,存储的动态子字段会导致索引失败。为了避免这个问题,请在这些动态字段上指定 |
汇率
您可以通过指定提供程序来配置汇率。原生支持两种提供程序类型:FileExchangeRateProvider
或 OpenExchangeRatesOrgProvider
。
FileExchangeRateProvider
此提供程序要求您提供一个包含汇率的文件。它是默认的,这意味着要使用此提供程序,您只需要在为此类型定义的 currencyConfig
中指定文件路径和名称作为值。
Solr 中包含一个示例 currency.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 从 OpenExchangeRates.Org 下载汇率,每小时更新美元与 170 种货币之间的汇率。这些汇率仅是对称的。
在这种情况下,您需要在字段类型的定义中指定 providerClass
并注册一个 API 密钥。这是一个例子
<fieldType name="currency" class="solr.CurrencyFieldType"
amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
providerClass="solr.OpenExchangeRatesOrgProvider"
refreshInterval="60"
ratesFileLocation="http://www.openexchangerates.org/api/latest.json?app_id=yourPersonalAppIdKey"/>
refreshInterval
的单位是分钟,因此上面的示例将每 60 分钟下载最新的汇率。刷新间隔可以增加,但不能减少。