Search in sources :

Example 1 with PointField

use of org.apache.solr.schema.PointField in project lucene-solr by apache.

the class FacetRangeProcessor method getNumericCalc.

public static Calc getNumericCalc(SchemaField sf) {
    Calc calc;
    final FieldType ft = sf.getType();
    if (ft instanceof TrieField) {
        switch(ft.getNumberType()) {
            case FLOAT:
                calc = new FloatCalc(sf);
                break;
            case DOUBLE:
                calc = new DoubleCalc(sf);
                break;
            case INTEGER:
                calc = new IntCalc(sf);
                break;
            case LONG:
                calc = new LongCalc(sf);
                break;
            case DATE:
                calc = new DateCalc(sf, null);
                break;
            default:
                throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Expected numeric field type :" + sf);
        }
    } else if (ft instanceof PointField) {
        // TODO, this is the same in Trie and Point now
        switch(ft.getNumberType()) {
            case FLOAT:
                calc = new FloatCalc(sf);
                break;
            case DOUBLE:
                calc = new DoubleCalc(sf);
                break;
            case INTEGER:
                calc = new IntCalc(sf);
                break;
            case LONG:
                calc = new LongCalc(sf);
                break;
            case DATE:
                calc = new DateCalc(sf, null);
                break;
            default:
                throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Expected numeric field type :" + sf);
        }
    } else {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Expected numeric field type :" + sf);
    }
    return calc;
}
Also used : PointField(org.apache.solr.schema.PointField) TrieField(org.apache.solr.schema.TrieField) SolrException(org.apache.solr.common.SolrException) FieldType(org.apache.solr.schema.FieldType)

Example 2 with PointField

use of org.apache.solr.schema.PointField in project lucene-solr by apache.

the class TermsQParserPlugin method createParser.

@Override
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
    return new QParser(qstr, localParams, params, req) {

        @Override
        public Query parse() throws SyntaxError {
            String fname = localParams.get(QueryParsing.F);
            FieldType ft = req.getSchema().getFieldTypeNoEx(fname);
            String separator = localParams.get(SEPARATOR, ",");
            //never null
            String qstr = localParams.get(QueryParsing.V);
            Method method = Method.valueOf(localParams.get(METHOD, Method.termsFilter.name()));
            //TODO pick the default method based on various heuristics from benchmarks
            //if space then split on all whitespace & trim, otherwise strictly interpret
            final boolean sepIsSpace = separator.equals(" ");
            if (sepIsSpace)
                qstr = qstr.trim();
            if (qstr.length() == 0)
                return new MatchNoDocsQuery();
            final String[] splitVals = sepIsSpace ? qstr.split("\\s+") : qstr.split(Pattern.quote(separator), -1);
            assert splitVals.length > 0;
            if (ft.isPointField()) {
                if (localParams.get(METHOD) != null) {
                    throw new IllegalArgumentException(String.format(Locale.ROOT, "Method '%s' not supported in TermsQParser when using PointFields", localParams.get(METHOD)));
                }
                return ((PointField) ft).getSetQuery(this, req.getSchema().getField(fname), Arrays.asList(splitVals));
            }
            BytesRef[] bytesRefs = new BytesRef[splitVals.length];
            BytesRefBuilder term = new BytesRefBuilder();
            for (int i = 0; i < splitVals.length; i++) {
                String stringVal = splitVals[i];
                //logic same as TermQParserPlugin
                if (ft != null) {
                    ft.readableToIndexed(stringVal, term);
                } else {
                    term.copyChars(stringVal);
                }
                bytesRefs[i] = term.toBytesRef();
            }
            return new SolrConstantScoreQuery(method.makeFilter(fname, bytesRefs));
        }
    };
}
Also used : BytesRefBuilder(org.apache.lucene.util.BytesRefBuilder) MatchNoDocsQuery(org.apache.lucene.search.MatchNoDocsQuery) PointField(org.apache.solr.schema.PointField) FieldType(org.apache.solr.schema.FieldType) BytesRef(org.apache.lucene.util.BytesRef)

Aggregations

FieldType (org.apache.solr.schema.FieldType)2 PointField (org.apache.solr.schema.PointField)2 MatchNoDocsQuery (org.apache.lucene.search.MatchNoDocsQuery)1 BytesRef (org.apache.lucene.util.BytesRef)1 BytesRefBuilder (org.apache.lucene.util.BytesRefBuilder)1 SolrException (org.apache.solr.common.SolrException)1 TrieField (org.apache.solr.schema.TrieField)1