Hi Everyone

I am busying attempting to integrate Lucene 4.0 Alpha into my code base. I have a custom QueryParser that extends QueryParser and overrides newRangeQuery and newTermQuery to support typed fields. I think I've figured out the newRangeQuery method translation (shown further down below), but newTermQuery method override is proving a little more tricky. I am not sure how to implement the equivalent of (Lucene 3.6 code below):

return new TermQuery(new Term(term.field(),
NumericUtils.doubleToPrefixCoded(Double.parseDouble(term
                            .text()))));

for the various field type.

A quick pointer would be most appreciated.

Thanks

Jamie

public class CustomQueryParser extends QueryParser {


@Override
    protected Query newTermQuery(Term term) {
        if (term.field().equals("uid")) {
            return super.newTermQuery(term);
        }

com.stimulus.field.Field field = Config.getConfig().getBlobFactory().getBlobFieldsFromCategory(blobCategory).get(term.field()); // this is our custom field
        if (field == null || field.getType() == Type.STRING) {
            return super.newTermQuery(term);
        } else if (field.getType() == Type.INTEGER
                || field.getType() == Type.BOOLEAN) {
            return new TermQuery(
new Term((new Term(term.field(),NumericUtils.intToPrefixCoded(Integer.parseInteger(term.text()))));
        } else if (field.getType() == Type.DOUBLE) {
            return new TermQuery(new Term(term.field(),
NumericUtils.doubleToPrefixCoded(Double.parseDouble(term
                            .text()))));
        } else if (field.getType() == Type.FLOAT
                || field.getType() == Type.SIZE) {
            return new TermQuery(new Term(term.field(),
                    NumericUtils.floatToPrefixCoded(Float.parseFloat(term
                            .text()))));
} else if (field.getType() == Type.DATE || field.getType() == Type.SIZE) {
            return new TermQuery(
new Term(term.field(), NumericUtils.longToPrefixCoded(Long
                            .parseLong(term.text()))));
        } else {
            return super.newTermQuery(term);
        }
    }

@Override
protected Query newRangeQuery(String fieldStr, String part1, String part2,boolean startInclusive, boolean endInclusive) { TermRangeQuery query = (TermRangeQuery) super.newRangeQuery(fieldStr,part1, part2, startInclusive, endInclusive);
        Field field = Config.getConfig().getBlobFactory()
                .getBlobFieldsFromCategory(blobCategory).get(fieldStr);
        if (field == null || field.getType() == Type.STRING) {
            return query;
        } else if (field.getType() == Type.INTEGER) {
            return NumericRangeQuery.newIntRange(field.getIndexField(), 4,
                    Integer.parseInt(query.getLowerTerm().utf8ToString()),
                    Integer.parseInt(query.getUpperTerm().utf8ToString()),
                    query.includesLower(), query.includesUpper());
        } else if (field.getType() == Type.LONG) {
            return NumericRangeQuery.newLongRange(field.getIndexField(), 8,
                    Long.parseLong(query.getLowerTerm().utf8ToString()),
                    Long.parseLong(query.getUpperTerm().utf8ToString()),
                    query.includesLower(), query.includesUpper());
        } else if (field.getType() == Type.DOUBLE) {
return NumericRangeQuery.newDoubleRange(field.getIndexField(), 8, Double.parseDouble(query.getLowerTerm().utf8ToString()), Double.parseDouble(query.getUpperTerm().utf8ToString()),
                    query.includesLower(), query.includesUpper());
        } else if (field.getType() == Type.FLOAT) {
return NumericRangeQuery.newFloatRange(field.getIndexField(), 4,
                    Float.parseFloat(query.getLowerTerm().utf8ToString()),
                    Float.parseFloat(query.getUpperTerm().utf8ToString()),
                    query.includesLower(), query.includesUpper());
} else if (field.getType() == Type.DATE || field.getType() == Type.SIZE) {
            return NumericRangeQuery.newLongRange(field.getIndexField(), 8,
                    Long.parseLong(query.getLowerTerm().utf8ToString()),
                    Long.parseLong(query.getUpperTerm().utf8ToString()),
                    query.includesLower(), query.includesUpper());
        }
        return query;
    }






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

Reply via email to