lucene-solr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Solr Wiki] Update of "CurrencyField" by HossMan
Date Tue, 05 Mar 2013 02:09:56 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Solr Wiki" for change notification.

The "CurrencyField" page has been changed by HossMan:
http://wiki.apache.org/solr/CurrencyField?action=diff&rev1=8&rev2=9

Comment:
TOC and shuffling some sections arround for readability

  <!> [[Solr3.6]]
+ 
+ <<TableOfContents>> 
  
  CurrencyField is an advanced field type indexing a monetary value as both value and currency.
It lets e.g. an e-commerce site display and query prices in many currencies, while only indexing
the price in one field/currency.
  
  The field type is backed by a pluggable !ExchangeRateProvider. The provider shipping with
Solr as default is the {{{FileExchangeRateProvider}}}. Changes in exchange rates from the
provider does not require re-indexing, since all conversions are done query-time. You simply
choose for each document which currency to index, and this will be fixed.
  
- === Configuration ===
+ = Configuration =
+ 
  See example schema for example of how to use the field type. The field type and field is
defined in schema.xml as follows:
  {{{
-   <fieldType name="currency" class="solr.CurrencyField" precisionStep="8" currencyConfig="currency.xml"
defaultCurrency="EUR" />
+   <dynamicField name="*_c" type="currency" />
+ 
+   <fieldType name="currency" class="solr.CurrencyField" 
+              precisionStep="8" currencyConfig="currency.xml" defaultCurrency="EUR" />
  
    <dynamicField name="*_c" type="currency" />
  }}}
  
+ The {{{defaultCurrency}}} will be used anytime the field is used with values that do not
specify and explicit currency. If unspecified the default {{{defaultCurrency}}} is {{{USD}}}.
Note that defaultCurrency cannot be changed unless followed by a full re-index.
- !DefaultCurrency will be used if you do not specify a currency. The default defaultCurrency
is {{{USD}}}, if not specified. Note that defaultCurrency cannot be changed unless followed
by a full re-index.
- !PrecisionStep is passed on to the !TrieLong sub-field. Value "8" gives faster range queries
for currencies. If you don't need that, you can save some index space using "0".
  
+ The {{{precisionStep}}} is passed on to the !TrieLong sub-field. Value "8" gives faster
range queries for currencies. If you don't need that, you can save some index space using
"0".
- === Indexing ===
- When you index e.g. a price, you specify value and currency separated by comma. We use the
dynamicField {{{*_c}}} in our examples:
- {{{
- <doc>
-   <field name="id">1</field>
-   <field name="myprice_c">1.00,USD</field>
- </doc>
- }}}
  
- Here, 1.00,USD is assumed to mean $1.00. Note that regardless of the currency being indexed,
you must encode the value as a floating point value (with a decimal point.) The fractional
portion of the floating point value is interpreted based upon the currency, via Currency.getDefaultFractionDigits().
+ Other !FieldType options for !CurrencyField depend on the !ExchangeRateProvider used.  In
this example !FileExchangeRateProvider uses the {{{currencyConfig}}} option.
  
+ = ExchangeRateProviders =
  
- === Querying ===
- The !CurrencyField supports both point queries and range queries. Here are some valid money
queries. Assume default currency is {{{USD}}}.
- In the example schema there is a copyField from "price" to "price_c", meaning that you can
test this on the example data:
- {{{
- price_c:25.00,USD                 or price_c:25.00               Both of these will query
for USD 25.00 since USD is default
- price_c:[* TO 10.00,USD]          or price_c:[* TO 10.00]
- price_c:[10.00,EUR TO 100.00,EUR]
- price_c:10.00,NOK
- }}}
- 
- === ExchangeRateProviders ===
  You may plug in your own provider class through implementing the interface {{{ExchangeRateProvider}}}.
It may be backed by a web-service, by a flat file, a DB or what have you.
  
  You specify which provider class to use through the parameter {{{providerClass}}} on the
fieldType.
  If no provider is specified in the fieldType config, {{{FileExchangeRateProvider}}} is used
as default.
  
- ==== FileExchangeRateProvider ====
+ == FileExchangeRateProvider ==
+ 
  This provider is backed by an XML file {{{currency.xml}}}, and a fieldType using this provider.
It requires one parameter {{{currencyConfig}}} which should point to your XML file. This config
is looked up through Solr's !ResourceLoader.
  
  The example {{{currency.xml}}} file in "conf" folder shows how the config could look. Here's
an example:
@@ -73, +62 @@

  
  Replication is supported, given that you explicitly configure replication for {{{currency.xml}}}.
Upon the arrival of a new version of currency.xml, Solr slaves will do a core reload and begin
using the new exchange rates. See [[SolrReplication#How_are_configuration_files_replicated.3F|SolrReplication]]
for more. SolrCloud is also supported since we use !ResourceLoader to load the file.
  
- ==== OpenExchangeRatesOrgProvider ====
+ == OpenExchangeRatesOrgProvider ==
  <!> [[Solr4.0]]
  
  This provider downloads and parses the freely available exchange rates from openexchangerates.org,
giving rates between USD and 158 currencies, updated hourly. The rates are symmetrical only.
Rates between any two currencies are calculated using USD as common base. Sample fieldType
configuration:
@@ -98, +87 @@

  
  This tells the CurrencyField to use the !OpenExchangeRates provider with the rates JSON
file loaded from a local web server, refreshed every hour. The defaults are using the latest
rates file from http://openexchangerates.org/latest.json, refreshed once every day.
  
- <!> '''NOTE:''' You can use this provider in Solr3.6 as well by downloading the plugin
jar file from [[https://issues.apache.org/jira/browse/SOLR-3255|SOLR-3255]] and adding it
to your classpath.
+ = Indexing =
  
- === Usage ===
+ When you index e.g. a price, you specify value and currency separated by comma. We use the
dynamicField {{{*_c}}} in our examples:
+ {{{
+ <doc>
+   <field name="id">1</field>
+   <field name="myprice_c">1.00,USD</field>
+ </doc>
+ }}}
+ 
+ Here, 1.00,USD is assumed to mean $1.00. Note that regardless of the currency being indexed,
you must encode the value as a floating point value (with a decimal point.) The fractional
portion of the floating point value is interpreted based upon the currency, via Currency.getDefaultFractionDigits().
+ 
+ 
+ = Querying =
+ The !CurrencyField supports both point queries and range queries. Here are some valid money
queries. Assume default currency is {{{USD}}}.
+ In the example schema there is a copyField from "price" to "price_c", meaning that you can
test this on the example data:
+ {{{
+ # Both of these will query for USD 25.00 since USD is default
+ price_c:25.00,USD
+ price_c:25.00
+ 
+ # Both of these will query for values under USD 10.00 since USD is default
+ price_c:[* TO 10.00,USD]
+ price_c:[* TO 10.00]
+ 
+ price_c:[10.00,EUR TO 100.00,EUR]
+ price_c:10.00,NOK
+ }}}
+ 
+ = Response Format =
  
  Solr documents will always yield the currency values they were indexed with, regardless
of how they were queried for. For example, a set of documents indexed in USD will yield USD
values for its Currency fields regardless if you performed queries in EUR. 
  
  So, for the display of Currency fields to a user, it is often necessary to perform a second
currency conversion once the documents are returned for display purposes. For accuracy, this
conversion should apply the same exchange rates in the currency.xml file available to Solr.
   
- == TODO ==
+ = TODO =
  
   * facet.range is not yet supported for this field type - See [[https://issues.apache.org/jira/browse/SOLR-3218|SOLR-3218]]
  

Mime
View raw message