0

我正在尝试向 Solr 请求添加一个布尔计算字段,如果文档的 id 字段在指定的 id 列表中,这将是真的。

我正在尝试这样做

fl=*,score,myfield:if(or(not(sub(id,1)),not(sub(id,2)),not(sub(id,3))),true,false)

但是得到

java.lang.UnsupportedOperationException
    at org.apache.lucene.queries.function.FunctionValues.floatVal(FunctionValues.java:44)
    at org.apache.solr.search.ValueSourceParser$17$1.func(ValueSourceParser.java:255)
    at org.apache.lucene.queries.function.valuesource.DualFloatFunction$1.floatVal(DualFloatFunction.java:61)
    at org.apache.lucene.queries.function.docvalues.FloatDocValues.intVal(FloatDocValues.java:51)
    at org.apache.lucene.queries.function.FunctionValues.boolVal(FunctionValues.java:52)
    at org.apache.solr.search.ValueSourceParser$68$1.func(ValueSourceParser.java:693)
    at org.apache.lucene.queries.function.valuesource.SimpleBoolFunction$1.boolVal(SimpleBoolFunction.java:53)
    at org.apache.solr.search.ValueSourceParser$70$1.func(ValueSourceParser.java:735)
    at org.apache.lucene.queries.function.valuesource.MultiBoolFunction$1.boolVal(MultiBoolFunction.java:56)
    at org.apache.lucene.queries.function.valuesource.IfFunction$1.objectVal(IfFunction.java:103)
    at org.apache.solr.response.transform.ValueSourceAugmenter.transform(ValueSourceAugmenter.java:99)
    at org.apache.solr.response.transform.DocTransformers.transform(DocTransformers.java:77)
    at org.apache.solr.response.TextResponseWriter.writeDocuments(TextResponseWriter.java:273)
    at org.apache.solr.response.TextResponseWriter.writeVal(TextResponseWriter.java:172)
    at org.apache.solr.response.JSONWriter.writeNamedListAsMapWithDups(JSONResponseWriter.java:183)
    at org.apache.solr.response.JSONWriter.writeNamedList(JSONResponseWriter.java:299)
    at org.apache.solr.response.JSONWriter.writeResponse(JSONResponseWriter.java:95)
    at org.apache.solr.response.JSONResponseWriter.write(JSONResponseWriter.java:60)
    at org.apache.solr.servlet.SolrDispatchFilter.writeResponse(SolrDispatchFilter.java:647)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:375)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)
    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:724)

我是否采取了完全错误的方法(除了我可以在 Solr 之外执行此操作),或者如果这是一个人会怎么做,我应该改变什么以使其工作?

4

1 回答 1

1

这应该有效(使用 more or()添加更多id值):

&fl=*,score,myfield:or(exists(query({!v='id:1'})),exists(query({!v='id:2'})))

对你来说失败的可能是 id 不是模式中的数字类型,所以你不能使用 sub()。所以你仍然可以尝试你的方式,但例如 id 应该是 tint 类型。

于 2014-01-24T10:59:40.797 回答