codecamp

在Solr中使用货币和汇率

该 currency 的 FieldType 为 Solr / Lucene(查询时间货币兑换和汇率) 提供货币值支持,它支持以下功能:

  • Point 查询
  • Range 查询
  • 函数范围(Function range)查询
  • 排序
  • 按货币代码或符号进行货币分析
  • 对称和不对称的汇率(如果汇率与交换货币有关,则不对称汇率是有用的)

配置货币

注意:CurrencyField 已被弃用,以支持 CurrencyFieldType;下面的所有配置示例使用 CurrencyFieldType。

货币字段类型在 schema.xml 中定义。以下是这种类型的默认配置。

<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”将适当地对其进行索引。价格应该用逗号与货币分开,价格必须用浮点值(小数点)进行编码。

在查询处理期间,范围和 Point 查询均受支持。

子字段后缀

您必须指定指定 amountLongSuffix 和 codeStrSuffix 的参数,对应于用于原始金额和货币动态子字段的动态字段,例如:

<fieldType name="currency" class="solr.CurrencyFieldType"
           amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
           defaultCurrency="USD" currencyConfig="currency.xml" />

在上面的例子中,原始金额字段将使用 "*_l_ns" 动态字段,该字段必须存在于架构中,并使用长字段类型,即扩展 LongValueFieldType。货币代码字段将使用 "*_s_ns" 动态字段,该字段必须存在于架构中,并使用字符串字段类型,即一个是或正在扩展的 StrField。

Tip:如果存储动态子字段,则原子更新将不起作用:正如在更新文档部分时提到的,在您使用原子更新时,存储的动态子将导致索引失败。要避免此问题,请在这些动态字段上指定 stored="false"。

汇率

您可以通过指定提供者来配置汇率。本地支持两种提供程序类型:FileExchangeRateProvider 或 OpenExchangeRatesOrgProvider。

FileExchangeRateProvider

该提供程序要求您提供汇率文件。这是默认的,这意味着要使用这个提供程序,只需将指定此类型的定义中的 currencyConfig 的文件路径和名称作为值。

currency.xmlSolr 中包含一个示例文件,在与 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 配置为从 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 分钟下载一次最新的费率。刷新间隔可能增加,但不会减少。

Solr包含的字段类型
Solr使用日期字段类型
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

SolrCloud

SolrCloud配置和参数

如何使用AsciiDoc

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }