https://issues.apache.org/jira/browse/SOLR-1569
On Nov 17, 2009, at 7:08 AM, Grant Ingersoll wrote: > Any idea on how to pass string constants to a function? > > When I do I get: > java.lang.RuntimeException: Exception during query > at > org.apache.solr.util.AbstractSolrTestCase.assertQ(AbstractSolrTestCase.java:218) > at > org.apache.solr.util.AbstractSolrTestCase.assertQ(AbstractSolrTestCase.java:201) > at > org.apache.solr.search.function.distance.DistanceFunctionTest.testHaversine(DistanceFunctionTest.java:55) > Caused by: org.apache.solr.common.SolrException: undefined field tv8nj9qj92me > at org.apache.solr.schema.IndexSchema.getField(IndexSchema.java:1077) > at > org.apache.solr.search.FunctionQParser.parseValueSource(FunctionQParser.java:249) > at > org.apache.solr.search.FunctionQParser.parseValueSource(FunctionQParser.java:173) > at > org.apache.solr.search.ValueSourceParser$20.parse(ValueSourceParser.java:341) > at > org.apache.solr.search.FunctionQParser.parseValueSource(FunctionQParser.java:245) > at > org.apache.solr.search.FunctionQParser.parseValueSource(FunctionQParser.java:173) > at > org.apache.solr.search.FunctionQParser.parse(FunctionQParser.java:40) > at org.apache.solr.search.QParser.getQuery(QParser.java:131) > at > org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:89) > at > org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:174) > at > org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131) > > FWIW, tv8nj9qj92me is a geohash. > > The code in question is: > protected ValueSource parseValueSource(boolean doConsumeDelimiter) throws > ParseException { > ValueSource valueSource; > > int ch = sp.peek(); > if (ch>='0' && ch<='9' || ch=='.' || ch=='+' || ch=='-') { > valueSource = new ConstValueSource(sp.getFloat()); > } > else { > String id = sp.getId(); > if (sp.opt("(")) { > // a function... look it up. > ValueSourceParser argParser = req.getCore().getValueSourceParser(id); > if (argParser==null) { > throw new ParseException("Unknown function " + id + " in > FunctionQuery(" + sp + ")"); > } > valueSource = argParser.parse(this); > sp.expect(")"); > } > else { > SchemaField f = req.getSchema().getField(id); // > <<<<<<<<<<<<<<<<<<< Exception here. > valueSource = f.getType().getValueSource(f, this); > } > } > > if (doConsumeDelimiter) > consumeArgumentDelimiter(); > > return valueSource; > } > > > Seems like we could change this to allow the id to be a constant and pass it > along if it isn't a field and wrap it in a literal (new function) or > constant. Thoughts? > > -Grant > -------------------------- Grant Ingersoll http://www.lucidimagination.com/ Search the Lucene ecosystem (Lucene/Solr/Nutch/Mahout/Tika/Droids) using Solr/Lucene: http://www.lucidimagination.com/search