包含分组和排序的Solr查询的java.lang.OutOfMemoryError

时间:2014-06-24 08:19:38

标签: java solr lucene jetty

当我在多个字段上进行分组和排序时,Solr正在给我java.lang.OutOfMemoryError: Java heap space。对于匹配少量文档的条件,查询运行正常。

这是我正在解雇的查询:

q=*%3A*&fq=DOCUMENT_TYPE%3APROPERTY&fq=%7B%21tag%3DCITY_ID%7DCITY_ID%3A%282%29&fq=%7B%21tag%3DLOCALITY_ID%7DLOCALITY_ID%3A%2850186%29&fq=%7B%21tag%3DUNIT_TYPE%7DUNIT_TYPE%3A%28"Apartment"+OR+"Villa"%29&rows=9999&start=0&sort=DISPLAY_ORDER+asc%2CPROJECT_PRIORITY+asc%2CPROJECT_ID+desc&group=true&group.ngroups=true&group.limit=-1&group.field=PROJECT_ID&group.sort=BEDROOMS+asc%2CSIZE+asc

这是最终的堆栈跟踪。

SEVERE: null:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
        at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:469)
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:297)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1337)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:484)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:486)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
        at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
        at org.eclipse.jetty.server.Server.handle(Server.java:351)
        at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)
        at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:47)
        at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:890)
        at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:944)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
        at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:66)
        at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:254)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.OutOfMemoryError: Java heap space

当我删除排序和分组部分时,查询运行正常。所以,问题显然在那里。

以下是我在启动时分配给solr的内存:

java -Xms512M -Xmx2048M -jar start.jar

我认为应该足以满足我的需求:

Total no of documents in my collection: 237816
Total no of matching documents in the query: 910

以下是schema.xml的摘录,对应于在排序和分组中使用的字段:

<field name="DISPLAY_ORDER" type="int" indexed="true" stored="true"/>
<field name="PROJECT_PRIORITY" type="double" indexed="true" stored="true"/>
<field name="PROJECT_ID" type="int" indexed="true" stored="true"/>
<field name="BEDROOMS" type="int" indexed="true" stored="true"/>
<field name="SIZE" type="sdouble" indexed="true" stored="true"/>

<fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true"/>

提前致谢!

0 个答案:

没有答案