unsere Solr stürzt von Zeit zu Zeit aufgrund OutOfMemory Fehler ab. Wir sind immer noch auf Version 4.0.0, planen aber nach der Lösung der folgenden Probleme auf die neueste Version zu migrieren.Faceting (Autocomplete) aus dem Speicher
Als ich bei Kater sah lüge ich folgende Fehlermeldung angezeigt:
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.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.OutOfMemoryError: Java heap space
at org.apache.lucene.search.FieldComparator$TermOrdValComparator.<init>(FieldComparator.java:1124)
at org.apache.lucene.search.SortField.getComparator(SortField.java:425)
at org.apache.lucene.search.FieldValueHitQueue$MultiComparatorsFieldValueHitQueue.<init>(FieldValueHitQueue.java:110)
at org.apache.lucene.search.FieldValueHitQueue.create(FieldValueHitQueue.java:173)
at org.apache.lucene.search.TopFieldCollector.create(TopFieldCollector.java:1123)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:552)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:507)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:484)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:309)
at si.amebis.termania.solr.ExternalSearch.search(ExternalSearch.java:307)
at si.amebis.termania.solr.ExternalSearch.handleRequestBody(ExternalSearch.java:235)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1699)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:455)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:276)
... 12 more
kurz nach dem Antrag auf ein Autocomplete-Feld (vorschlagen, wie Sie schreiben). Anfrage Details sind unten:
q - *:*
start - 0
rows - 0
fq - (Type:1 OR Type:2)
facet - true
facet.limit - 20
facet.mincount - 1
facet.sort - true
facet.prefix - "mi"
facet.field - "Autocomplete"
--
which returns 8105170 hits
wo die automatische Vervollständigung Feld ist wie folgt definiert:
<field name="Autocomplete" type="grams" indexed="true" stored="false" omitNorms="true" required="False" multiValued="true" />
<fieldtype name="grams" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.ShingleFilterFactory" maxShingleSize="10" outputUnigrams="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.TrimFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.TrimFilterFactory" />
</analyzer>
</fieldtype>
Index Details:
Num document: 4338603
Index size: 10.1 Gb
Ram: 64Gb (-Xmx45000M)
Terms count in Autocomplete field: 70.459.723
Ich gehe davon auf einem Textfeld Facettierung und so viele Begriffe erfordert viel der Erinnerung.
Wie kann ich berechnen, wie viel Speicher benötigt wird, und gibt es eine effizientere Möglichkeit zur automatischen Vervollständigung (mit Phrasen - N-Gramm)?
Vielen Dank im Voraus!