通貨と為替レート
currency
フィールドタイプは、クエリ時の通貨変換と為替レートを使用して、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" />
この例では、フィールドタイプの名前とクラスを定義し、米ドルの "USD" を defaultCurrency
として定義しています。また、"currency.xml" というファイルを使用する currencyConfig
を定義しています。これは、デフォルト通貨と他の通貨間の為替レートのファイルです。通貨データの定期的なダウンロードを可能にする代替実装もあります。詳しくは、以下の為替レートを参照してください。
Solr に同梱されている多くの例スキーマには、このタイプを使用する動的フィールドが含まれています。例えば、次の例です。
<dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
この動的フィールドは、_c
で終わるフィールドに一致し、通貨タイプのフィールドにします。
インデックス作成時には、通貨フィールドはネイティブ通貨でインデックスを作成できます。たとえば、e コマースサイトの商品がユーロで表示されている場合、価格フィールドを "1000,EUR" としてインデックスを作成すると、適切にインデックスが作成されます。価格はコンマで通貨から区切る必要があり、価格は浮動小数点値(小数点)でエンコードする必要があります。
クエリ処理中は、範囲クエリとポイントクエリの両方がサポートされます。
サブフィールドサフィックス
生の金額と通貨動的サブフィールドに使用される動的フィールドに対応するパラメータ amountLongSuffix
と codeStrSuffix
を指定する必要があります。例:
<fieldType name="currency" class="solr.CurrencyFieldType"
amountLongSuffix="_l_ns" codeStrSuffix="_s_ns"
defaultCurrency="USD" currencyConfig="currency.xml" />
上記の例では、生の金額フィールドは "*_l_ns"
動的フィールドを使用します。これはスキーマに存在し、LongValueFieldType
を拡張する long フィールドタイプ(つまり、long 型)を使用する必要があります。通貨コードフィールドは "*_s_ns"
動的フィールドを使用します。これはスキーマに存在し、StrField
を拡張するか、または StrField
を使用する文字列フィールドタイプを使用する必要があります。
動的サブフィールドが格納されている場合、アトミック更新は機能しません
アトミック更新フィールドの格納で説明されているように、格納された動的サブフィールドは、アトミック更新を使用する場合、インデックス作成が失敗する原因となります。この問題を回避するには、これらの動的フィールドで |
為替レート
プロバイダを指定することで為替レートを設定します。ネイティブには、FileExchangeRateProvider
または OpenExchangeRatesOrgProvider
の 2 つのプロバイダタイプがサポートされています。
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
OpenExchangeRates.Orgから為替レートをダウンロードするように Solr を設定できます。USD と 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分ごとに最新のレートをダウンロードします。更新間隔は増やすことができますが、減らすことはできません。