SOLR,如果排序功能失败

标签 solr solr4

尝试按 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/

相关文章:

solr - 将数据导入solr时拆分多值字段

java - 我什么时候应该使用多个 SOLR 实例?

Solr-以所有顺序包含所有术语的结果

java - 将 token 添加到 lucene token 流

Solr HTTP Api - 响应状态

java - Solr CloudSolrClient : Caused by: java. lang.ClassCastException : java. lang.String 无法转换为 java.util.Map

php - 这个系统有什么更好的 solr 查询?

solr - 如何在 solr 中进行复杂短语关键字搜索

java - solrj 子父关系查询失败

Solr 4.6.1 流式 Solr 服务器错误