尝试按 if 函数排序:if( true,due_register,0)
出现错误:
2014-11-05 22:03:21,208 [ERROR] <qtp101478235-372>@SolrException.java:120 null:java.lang.UnsupportedOperationException
at org.apache.lucene.queries.function.FunctionValues.doubleVal(FunctionValues.java:47)
at org.apache.lucene.queries.function.valuesource.IfFunction$1.doubleVal(IfFunction.java:83)
at org.apache.lucene.queries.function.ValueSource$ValueSourceComparator.copy(ValueSource.java:153)
at org.apache.lucene.search.TopFieldCollector$OneComparatorNonScoringCollector.collect(TopFieldCollector.java:86)
at org.apache.lucene.search.Scorer.score(Scorer.java:65)
at org.apache.lucene.search.ConstantScoreQuery$ConstantScorer.score(ConstantScoreQuery.java:256)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:621)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:297)
at org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:1606)
at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1394)
at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:475)
at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:459)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:214)
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:780)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:427)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:217)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:368)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:744)
如果我在 fl 参数中包含相同的子句: fl=if( true,due_register,0), due_register, 存在(due_register)
我收到以下结果:
"docs": [
{
"due_register": "1414713600000",
"if( true,due_register,0)": "1414713600000",
"exists(due_register)": true
},
{
"due_register": "",
"exists(due_register)": true
},
{
"due_register": "",
"exists(due_register)": true
},
{
"due_register": "",
"exists(due_register)": true
}
]
if( true,due_register,0) 为空时完全被错过,但同时直接字段和存在函数工作正常
最佳答案
正如@arun所说,
looks like sorting does not work with function queries that return strings.
所以我将字段迁移到长类型,但效果不佳。
关于SOLR,如果排序功能失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26764140/