[ 
https://issues.apache.org/jira/browse/LUCENE-1768?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12740340#action_12740340
 ] 

Luis Alves commented on LUCENE-1768:
------------------------------------

You could still do something similar by simply override 
RangeQueryNodeBuilder.build(QueryNode queryNode), but this is not clean (it is 
kind of a hack).

A clean implementation would allow the user to configure the field types (which 
the "new flexible queryparser" does).
I'm new to NumericRange Queries and Rangequeries in general, but here is what I 
think it should look like.

Here is a seudo java example:
{code}
    final String defaultField = "default";
    final String monthField = "month";
    final String hourField = "hour";
    final String distanceField = "distance";
    final String moneyField = "money";

    Map<CharSequence, RangeTools.Type> rangeTypes =  new HashMap<CharSequence, 
RangeTools.Type>();
    
    // set a field specific range type per field
    rangeTypes.put(monthField, new RangeTools.Type(RangeUtils.DATE, 
DateTools.Resolution.MONTH) );
    rangeTypes.put(hourField, new RangeUtils.Type(RangeUtils.DATE,  
DateTools.Resolution.HOUR) );
    rangeTypes.put(distanceField, RangeUtils.getType(RangeUtils.NUMERIC,  
RangeUtils.NumericType.LONG, NumericUtils.PRECISION_STEP_DEFAULT) );
    rangeTypes.put(moneyField, RangeUtils.getType(RangeUtils.NUMERIC,  
RangeUtils.NumericType.Type.FLOAT, NumericUtils.PRECISION_STEP_DEFAULT) );

    StandardQueryParser qp = new StandardQueryParser();

    // set default range type to Int default precision
    qp.setDefaultRangeType(RangeUtils.getType(RangeUtils.NUMERIC,  
RangeUtils.NumericType.INT, NumericUtils.PRECISION_STEP_DEFAULT));

    // set field range types
    qp.setRangeTypes(rangeTypes);

   Query q = qp.parser(" month:[01/01/2004 TO 01/01/2005]  distance:[1000 to 
2000] money: [23.50 to 50.99]");

{code}

> NumericRange support for new query parser
> -----------------------------------------
>
>                 Key: LUCENE-1768
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1768
>             Project: Lucene - Java
>          Issue Type: New Feature
>          Components: QueryParser
>    Affects Versions: 2.9
>            Reporter: Uwe Schindler
>            Assignee: Uwe Schindler
>             Fix For: 2.9
>
>
> It would be good to specify some type of "schema" for the query parser in 
> future, to automatically create NumericRangeQuery for different numeric 
> types? It would then be possible to index a numeric value 
> (double,float,long,int) using NumericField and then the query parser knows, 
> which type of field this is and so it correctly creates a NumericRangeQuery 
> for strings like "[1.567..*]" or "(1.787..19.5]".
> There is currently no way to extract if a field is numeric from the index, so 
> the user will have to configure the FieldConfig objects in the ConfigHandler. 
> But if this is done, it will not be that difficult to implement the rest.
> The only difference between the current handling of RangeQuery is then the 
> instantiation of the correct Query type and conversion of the entered numeric 
> values (simple Number.valueOf(...) cast of the user entered numbers). 
> Evenerything else is identical, NumericRangeQuery also supports the MTQ 
> rewrite modes (as it is a MTQ).
> Another thing is a change in Date semantics. There are some strange flags in 
> the current parser that tells it how to handle dates.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to