通貨と為替レート

currency フィールドタイプは、クエリ時の通貨変換と為替レートを使用して、Solr に通貨の値をサポートします。以下の機能がサポートされています。

  • ポイントクエリ

  • 範囲クエリ

  • 関数範囲クエリ

  • ソート

  • 通貨コードまたは記号による通貨解析

  • 対称的および非対称的な為替レート(非対称的な為替レートは、通貨交換に手数料が関連付けられている場合に役立ちます)

  • 範囲ファセット(facet.range または json.facettype:range を使用)は、startend の値が同じ通貨で指定されている限りサポートされます。

通貨の設定

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" としてインデックスを作成すると、適切にインデックスが作成されます。価格はコンマで通貨から区切る必要があり、価格は浮動小数点値(小数点)でエンコードする必要があります。

クエリ処理中は、範囲クエリとポイントクエリの両方がサポートされます。

サブフィールドサフィックス

生の金額と通貨動的サブフィールドに使用される動的フィールドに対応するパラメータ amountLongSuffixcodeStrSuffix を指定する必要があります。例:

<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 を使用する文字列フィールドタイプを使用する必要があります。

動的サブフィールドが格納されている場合、アトミック更新は機能しません

アトミック更新フィールドの格納で説明されているように、格納された動的サブフィールドは、アトミック更新を使用する場合、インデックス作成が失敗する原因となります。この問題を回避するには、これらの動的フィールドで stored="false" を指定します。

為替レート

プロバイダを指定することで為替レートを設定します。ネイティブには、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分ごとに最新のレートをダウンロードします。更新間隔は増やすことができますが、減らすことはできません。