lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erick Erickson <erickerick...@gmail.com>
Subject Re: Filtering a query by range returning unexpected results
Date Thu, 05 Jul 2012 22:14:33 GMT
For future reference, JIRA is here:
https://issues.apache.org/jira/browse/SOLR-3595

Erick

On Thu, Jul 5, 2012 at 4:19 PM, Andrew Meredith <andymeredith@gmail.com> wrote:
> Thanks! That worked. I re-built the index with my "prices" field being of
> the tfloat type, and I am now able to perform range queries. I appreciate
> your help, Erick.
>
> On Tue, Jul 3, 2012 at 9:35 AM, Erick Erickson <erickerickson@gmail.com>wrote:
>
>> OK, this appears to be something with the "currency" type. It works fine
>> for
>> regular float fields. I can't get the multiValued currency types to work
>> with
>> range queries. Don't quite know what I was doing when I thought they
>> _did_ work.
>>
>> One work-around I think, if you are using a single currency USD might be
>> to copy your price to a simple float field and do your range queries on
>> that.
>>
>> I'm not at all sure that the currency type was ever intended to support
>> multiValued="true". I don't know enough about the internals to know if
>> it's even a good idea to try, but the current behavior could be improved
>> upon.
>>
>> But it seems to me that one of two things should happen:
>> 1> the startup should barf if a currency type is multiValued (fail early)
>> or
>> 2> currency should work when multiValued.
>>
>> Unfortunately, JIRA is down so I can't look to see if this is already a
>> known
>> issue or enter a JIRA if it isn't. I'll try to look later if it all
>> comes back up.
>>
>> Best
>> Erick
>>
>> On Mon, Jul 2, 2012 at 1:53 PM, Andrew Meredith <andymeredith@gmail.com>
>> wrote:
>> > Yep, that 15.00.00 was a typo.
>> >
>> > Here are the relevant portions of my schema.xml:
>> >
>> > <types>
>> >     <!-- CUT -->
>> >     <fieldType name="currency" class="solr.CurrencyField"
>> precisionStep="8"
>> > defaultCurrency="USD" currencyConfig="currency.xml" />
>> >     <!-- CUT -->
>> > </types>
>> >
>> > <fields>
>> >     <!-- CUT -->
>> >     <field name="prices" type="currency" indexed="true" stored="true"
>> > multiValued="true" />
>> >     <!-- CUT -->
>> > </fields>
>> >
>> > And here is the output of a sample query with &debugQuery=on appended:
>> >
>> > <lst name="debug">
>> > <str name="rawquerystring">Furtick</str>
>> > <str name="querystring">Furtick</str>
>> > <str name="parsedquery">
>> > +DisjunctionMaxQuery((subtitle:furtick | frontlist_flapcopy:furtick^0.5 |
>> > frontlist_ean:furtick^6.0 | author:furtick^3.0 | series:furtick^1.5 |
>> > title:furtick^2.0)) ()
>> > </str>
>> > <str name="parsedquery_toString">
>> > +(subtitle:furtick | frontlist_flapcopy:furtick^0.5 |
>> > frontlist_ean:furtick^6.0 | author:furtick^3.0 | series:furtick^1.5 |
>> > title:furtick^2.0) ()
>> > </str>
>> > <lst name="explain"/>
>> > <str name="QParser">ExtendedDismaxQParser</str>
>> > <null name="altquerystring"/>
>> > <null name="boostfuncs"/>
>> > <arr name="filter_queries">
>> > <str>prices:[5.00 TO 21.00]</str>
>> > <str>forsaleinusa:true</str>
>> > </arr>
>> > <arr name="parsed_filter_queries">
>> > <str>
>> > ConstantScore(frange(currency(prices)):[500 TO 2100])
>> > </str>
>> > <str>forsaleinusa:true</str>
>> > </arr>
>> > <lst name="timing">
>> > <double name="time">3.0</double>
>> > <lst name="prepare">
>> > <double name="time">2.0</double>
>> > <lst name="org.apache.solr.handler.component.QueryComponent">
>> > <double name="time">2.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.FacetComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.MoreLikeThisComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.HighlightComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.StatsComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.SpellCheckComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.DebugComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > </lst>
>> > <lst name="process">
>> > <double name="time">1.0</double>
>> > <lst name="org.apache.solr.handler.component.QueryComponent">
>> > <double name="time">1.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.FacetComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.MoreLikeThisComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.HighlightComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.StatsComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.SpellCheckComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > <lst name="org.apache.solr.handler.component.DebugComponent">
>> > <double name="time">0.0</double>
>> > </lst>
>> > </lst>
>> > </lst>
>> > </lst>
>> >
>> >
>> > If I run this same query with the filter, prices:[5.00 TO 99.00], then I
>> > get a result that includes the following field:
>> >
>> > <arr name="prices">
>> > <str>12.99,USD</str>
>> > <str>14.99,USD</str>
>> > <str>15.00,USD</str>
>> > <str>25.00,USD</str>
>> > </arr>
>> >
>> >
>> > I can't figure out why this is not being returned with the first query.
>> > I'll try re-building the index with the "prices" field type set to float
>> > and see if that changes the behaviour.
>> >
>> > On Sat, Jun 30, 2012 at 6:49 PM, Erick Erickson <erickerickson@gmail.com
>> >wrote:
>> >
>> >> This works fine for me with 3.6, float fields and even on a currency
>> type.
>> >>
>> >> I'm assuming a typo for 15.00.00 BTW.
>> >>
>> >> I admit I'm not all that familiar with the "currency" type, which I
>> infer
>> >> you're
>> >> using given the "USD" bits. But I ran a quick test with currency types
>> and
>> >> it worked at least the way I ran it... But another quick look shows that
>> >> some interesting things are being done with the "currency" type, so who
>> >> knows?
>> >>
>> >> So, let's see your relevant schema bits, and the results of your query
>> >> when you attach &debugQuery=on to it.....
>> >>
>> >>
>> >> Best
>> >> Erick
>> >>
>> >> On Fri, Jun 29, 2012 at 2:43 PM, Andrew Meredith <
>> andymeredith@gmail.com>
>> >> wrote:
>> >> > First off, I have to say that I am working on my first project that
>> has
>> >> > required me to work with Solr, so my question my be very elementary
-
>> I
>> >> > just could not find an answer elsewhere.
>> >> >
>> >> > I am trying to add a ranged query filter that returns all items in
a
>> >> given
>> >> > "prices" range. In my situation, each item can have multiple prices,
>> so
>> >> it
>> >> > is a multivalued field. When I search a range, say, prices:[15.00.00
>> TO
>> >> > 21.00], I want Solr to return all items that have *any* price in that
>> >> > range, rather than returning results where *all* prices are in the
>> range.
>> >> > For example, if i have an item with the following prices, it will not
>> be
>> >> > returned:
>> >> >   <arr name="prices">
>> >> >   <str>19.99,USD</str>
>> >> >   <str>22.50,USD</str>
>> >> >   </arr>
>> >> >
>> >> > Is there any way to change the behaviour of Solr so that it will match
>> >> > documents in which any value of a multivalued field matches a ranged
>> >> query
>> >> > filter?
>> >> >
>> >> > Thanks!
>> >> >
>> >> > --
>> >> > <http://ofchristonearth.wordpress.com/>
>> >> > S.D.G.
>> >>
>> >
>> >
>> >
>> > --
>> > Andrew Meredith
>> >
>> > Personal Blog: Soli Deo Gloria <http://kendru.wordpress.com/>
>> > Programming Blog <http://www.andrewmeredith.info>
>> >
>> > S.D.G.
>>
>
>
>
> --
> Andrew Meredith
>
> Personal Blog: Soli Deo Gloria <http://kendru.wordpress.com/>
> Programming Blog <http://www.andrewmeredith.info>
>
> S.D.G.

Mime
View raw message