以下查询在Solr 3.5中正常工作:
http://localhost:6060/solr/newsarchive/select/?q=WebSite:www.shorouknews.com&sort=Date%20desc&version=2.2&start=&rows=10&indent=on&wt=json
但是,它会在Solr 4.7中生成以下错误。我尝试更新<luceneMatchVersion>LUCENE_35</luceneMatchVersion>
并将其设置为LUCENE_40,但错误仍然存在。这是schema.xml的问题吗?或索引中的问题?但是,还有其他简单的查询可以正常工作,例如http://localhost:8983/solr/newsarchive4/select?q=%D9%85%D8%B5%D8%B1&wt=json&indent=true
{
"responseHeader":{
"status":500,
"QTime":35,
"params":{
"sort":"Date desc",
"indent":"on",
"start":"",
"q":"WebSite:www.shorouknews.com",
"wt":"json",
"rows":"10",
"version":"2.2"}},
"error":{
"msg":"For input string: \"\"",
"trace":"java.lang.NumberFormatException: For input string: \"\"\r\n\tat java.lang.NumberFormatException.forInputString(Unknown Source)\r\n\tat java.lang.Integer.parseInt(Unknown Source)\r\n\tat java.lang.Integer.parseInt(Unknown Source)\r\n\tat org.apache.solr.search.QParser.getSort(QParser.java:244)\r\n\tat org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:151)\r\n\tat org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:196)\r\n\tat org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)\r\n\tat org.apache.solr.core.SolrCore.execute(SolrCore.java:1916)\r\n\tat org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:768)\r\n\tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:415)\r\n\tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:205)\r\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)\r\n\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)\r\n\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)\r\n\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)\r\n\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)\r\n\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)\r\n\tat org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)\r\n\tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)\r\n\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)\r\n\tat org.eclipse.jetty.server.Server.handle(Server.java:368)\r\n\tat org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)\r\n\tat org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)\r\n\tat org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)\r\n\tat org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)\r\n\tat org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)\r\n\tat org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)\r\n\tat org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)\r\n\tat org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)\r\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)\r\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)\r\n\tat java.lang.Thread.run(Unknown Source)\r\n",
"code":500}}
修改
我注意到查询中
start=
未定义,&start=&
,其他版本的Solr认为 它等于0但4.7认为它未知。问题变成了,如何 我可以让Solr将0分配给未定义的start
吗?
答案 0 :(得分:1)
嗯,它没有未定义,它实际上存在于网址中(这就是为什么您会收到错误 - 您尝试将其设置为空字符串) 。您可以尝试将其作为SearchHandler的默认值提供,但我不确定这是否真的有用,因为如上所述,该值实际存在。它只是空的。
<lst name="defaults">
<int name="start">0</int>
</lst>
最好修改一下您发送空start=
参数的原因,或者可能在查询到达Solr之前在容器中重写它。如何操作取决于您正在使用的应用程序容器。