2016-07-10 25 views
0

Ich versuche, Location-Geodist-Funktion in meiner Solrj-Abfrage verwenden. Meine solr Abfrage ist: -Undefiniertes Feld * Solrj Geolocation-Abfrage

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

diese Abfrage funktioniert gut, wenn ich die von Browser getroffen, aber sobald ich versuche, diese Abfrage von meinem Java-Code zu schlagen wirft es unter Ausnahme: -

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) 

versucht, aus den letzten 4-5 Stunden zu debuggen, konnte aber die Lösung nicht finden.

+1

Können Sie Ihren Java-Code posten? –

Antwort

0

Ich vermute, es gibt ein Problem in der Anfrage-URL.

Blick auf move2gathercollection Ich sehe die Abfrage ist nicht vollständig codiert. Wenn alle die Abfrage q=*:* codiert wurde, soll es seine q=*%3A*

So gegeben, dass die q Parameter, richtig codiert, das Problem mit dem Rest der URL ist, die zwei Mal vor dem Aufruf codiert wird, werden können.

Nur um klar zu sein, wenn ich solr log schaue, sind die Anfrage bereits decodiert, so dass Sie alle Parameter lesen können. In Ihrem 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 

Ich sehe nur der erste Teil des Antrags ist lesbar q=*:* und der Rest der URL ist %26sfield%3Dlatlng_coordinate%26pt%3D70.00,80.000%26sort%3Dgeodist()+asc%26fl%3D_dist_:geodist()%26fl%3Dname codiert, die mir ziemlich seltsam.

Ich nehme an, die gesamte Zeichenfolge nach q: wird als der Name eines Feldes gelesen, das mit einem * beginnt.

+0

, Da es jetzt zu viel Kopfschmerz ist, plane ich, ein Abfrageobjekt mit SolrQuery zu erstellen, konnte aber kein Tutorial finden. Haben Sie eine Referenz dafür ?? – NamingException

+0

Versuchen Sie dies http://yonik.com/solr/query-syntax/ – freedev