2014-01-23 1 views
0

부울 계산 필드를 Solr 요청에 추가하려고합니다. 문서의 id 필드가 지정된 필드에있는 경우 참입니다 ID 목록.id가 지정된 집합에있는 경우 'true'가 될 부울 계산 필드 지정

나는 (I이 외부 SOLR을 할 수있는 외에) 완전히 잘못된 접근 방식을 찍은 적이 이런 식

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) 

을 받고 일을하려고하거나 경우있어 어떻게 작동시켜야할까요? 이 작업을해야

답변

1

(더 이상을 사용()가ID 값을 추가하는 방법) :

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

은 무엇을 당신을 위해 실패하는 것은 아마 그 ID가 스키마의 숫자 형식이 아닙니다 그래서 당신은 할 수 없습니다 sub()를 사용하십시오. 그래서 당신은 여전히 ​​자신의 방법을 시도 할 수 있지만 ID는 예를 들어 색조 유형이어야합니다.

+0

고마워요! 이것은 id였습니다. id는 기본 스키마에 string 유형입니다. – axk