貨幣與匯率
currency
FieldType 提供對 Solr 的貨幣價值支援,具有查詢時的貨幣轉換與匯率。支援下列功能
-
點查詢
-
範圍查詢
-
函式範圍查詢
-
排序
-
依貨幣代碼或符號剖析貨幣
-
對稱與非對稱匯率(如果兌換貨幣有相關費用,非對稱匯率會很有用)
-
範圍分面(使用
facet.range
或json.facet
中的type:range
),只要start
和end
值是以相同的貨幣指定。
設定貨幣
CurrencyField 已棄用
CurrencyField 已棄用,改用 CurrencyFieldType;下方所有設定範例皆使用 CurrencyFieldType。 |
currency
欄位類型定義在 schema 中。這是此類型的預設設定。
<fieldType name="currency" class="solr.CurrencyFieldType"
amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
defaultCurrency="USD" currencyConfig="currency.xml" />
在此範例中,我們定義了欄位類型的名稱和類別,並將 defaultCurrency
定義為「USD」,代表美元。我們也定義了 currencyConfig
來使用名為「currency.xml」的檔案。這是我們的預設貨幣對其他貨幣之間的匯率檔案。還有另一種實作方式可以定期下載貨幣資料。請參閱下方的 匯率 了解更多資訊。
許多隨 Solr 提供的範例 schema 都包含使用此類型的 動態欄位,例如此範例
<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"
動態欄位,該欄位必須存在於 schema 中,並且使用 long 欄位類型,也就是擴展自 LongValueFieldType
的類型。貨幣代碼欄位將使用 "*_s_ns"
動態欄位,該欄位必須存在於 schema 中,並且使用 string 欄位類型,也就是屬於或擴展自 StrField
的類型。
如果儲存了動態子欄位,原子更新將無法運作。
如原子更新欄位儲存所述,當您使用原子更新時,儲存的動態子欄位會導致索引失敗。為避免此問題,請在這些動態欄位上指定 |
匯率
您可以透過指定提供者來設定匯率。原生支援兩種提供者類型:FileExchangeRateProvider
或 OpenExchangeRatesOrgProvider
。
FileExchangeRateProvider
這個提供者要求您提供一個包含匯率的檔案。它是預設值,這表示要使用此提供者,您只需要在這種型別的定義中,將檔案路徑和名稱指定為 currencyConfig
的值即可。
Solr 隨附一個範例 currency.xml
檔案,位於與 schema 檔案相同的目錄中。以下是此檔案的一小段程式碼:
<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 分鐘下載最新的匯率。更新間隔可以增加,但不能減少。