NameNotFoundException
NameNotFoundException

Reputation: 896

Undefined field * solrj geolocation query

I am trying to use location geodist function in my solrj query. My solr query is :-

q=*:*&sfield=latlng_coordinate&pt=70.00,80.000&sort=geodist() asc&fl=_dist_:geodist()&fl=name,id&fl=name,id

this query works fine when I hit this from browser but as soon as I try to hit this query from my java code it throws below exception:-

SEVERE: org.apache.solr.common.SolrException: undefined field *
    at org.apache.solr.schema.IndexSchema.getDynamicFieldType(IndexSchema.java:1241)
    at org.apache.solr.schema.IndexSchema.getFieldType(IndexSchema.java:1193)
    at org.apache.solr.parser.SolrQueryParserBase.getWildcardQuery(SolrQueryParserBase.java:774)
    at org.apache.solr.parser.SolrQueryParserBase.handleBareTokenQuery(SolrQueryParserBase.java:521)
    at org.apache.solr.parser.QueryParser.Term(QueryParser.java:299)
    at org.apache.solr.parser.QueryParser.Clause(QueryParser.java:185)
    at org.apache.solr.parser.QueryParser.Query(QueryParser.java:107)
    at org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:96)
    at org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:152)
    at org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:50)
    at org.apache.solr.search.QParser.getQuery(QParser.java:141)
    at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:145)
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:196)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1916)
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:768)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:415)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:205)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Jul 10, 2016 8:22:30 PM org.apache.solr.core.SolrCore execute
INFO: [move2gathercollection] webapp=/solr path=/select params={q=*:*%26sfield%3Dlatlng_coordinate%26pt%3D70.00,80.000%26sort%3Dgeodist()+asc%26fl%3D_dist_:geodist()%26fl%3Dname,id&fl=name,id&wt=javabin&version=2} status=400 QTime=3 
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: undefined field *
    at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:495)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:199)
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:91)
    at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
    at com.move2gather.search.SolrServerHelper.getSolrQueryResults(SolrServerHelper.java:172)
    at com.move2gather.search.data.SolrSearcher.getSuggesionsByGeoPoints(SolrSearcher.java:59)

trying to debug from past 4-5 hours but couldn't find out the solution.

Upvotes: 0

Views: 170

Answers (1)

freedev
freedev

Reputation: 30197

I suppose there is a problem in the request url.

Looking at move2gathercollection I see the query is not completely encoded. If all the query q=*:* was encoded, it should be q=*%3A*

So given that the q parameter, is correctly encoded, the problem is with the rest of the url which may be is encoded two times before the call.

Just to be clear, when I look at solr log, the request are already decoded, so you can read all the parameters. In your log:

INFO: [move2gathercollection] webapp=/solr path=/select params={q=*:*%26sfield%3Dlatlng_coordinate%26pt%3D70.00,80.000%26sort%3Dgeodist()+asc%26fl%3D_dist_:geodist()%26fl%3Dname,id&fl=name,id&wt=javabin&version=2} status=400 QTime=3 

I see only the first part of the request is readable q=*:* and the rest of the url is encoded %26sfield%3Dlatlng_coordinate%26pt%3D70.00,80.000%26sort%3Dgeodist()+asc%26fl%3D_dist_:geodist()%26fl%3Dname, which is pretty strange to me.

I suppose the entire string after q: is read as the name of a field which starts with a *.

Upvotes: 0

Related Questions