2015-04-04 7 views
9

Ich bin (durch ein Java-Programm) für die Indizierung hinzufügen, ein Dokument in SOLR-Index, aber nach add(inputDoc) Methode gibt es eine Ausnahme. Die Log-in solr Web-Interface enthält folgende Komponenten:Hinzufügen eines Dokuments zum Index in SOLR: Dokument enthält mindestens einen immensen Begriff

Caused by: java.lang.IllegalArgumentException: Document contains at least one immense term in field="text" (whose UTF8 encoding is longer than the max length 32766), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: '[99, 111, 112, 101, 114, 116, 105, 110, 97, 32, 105, 110, 102, 111, 114, 109, 97, 122, 105, 111, 110, 105, 32, 113, 117, 101, 115, 116, 111, 32]...', original message: bytes can be at most 32766 in length; got 226781 
    at org.apache.lucene.index.DefaultIndexingChain$PerField.invert(DefaultIndexingChain.java:687) 
    at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:359) 
    at org.apache.lucene.index.DefaultIndexingChain.processDocument(DefaultIndexingChain.java:318) 
    at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:239) 
    at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:457) 
    at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1511) 
    at org.apache.solr.update.DirectUpdateHandler2.addDoc0(DirectUpdateHandler2.java:240) 
    at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:164) 
    ... 40 more 
Caused by: org.apache.lucene.util.BytesRefHash$MaxBytesLengthExceededException: bytes can be at most 32766 in length; got 226781 
    at org.apache.lucene.util.BytesRefHash.add(BytesRefHash.java:284) 
    at org.apache.lucene.index.TermsHashPerField.add(TermsHashPerField.java:151) 
    at org.apache.lucene.index.DefaultIndexingChain$PerField.invert(DefaultIndexingChain.java:663) 
    ... 47 more 

Bitte, was soll ich tun, um dieses Problem zu lösen?

Antwort

5

Sie haben wahrscheinlich erfüllt, was in LUCENE-5472 [1] beschrieben wird. Dort gibt Lucene einen Fehler aus, wenn ein Begriff zu lang ist. Sie könnten:

  • Verwendung (in Index-Analysator), ein LengthFilterFactory [2], um diese Tokens, um herauszufiltern, die nicht fallen eine angeforderte Längenbereich

  • Verwendung (in Index-Analysator) withing ein TruncateTokenFilterFactory [3] für die maximale Länge der indizierten Token

  • eine benutzerdefinierte UpdateRequestProcessor, aber das hängt wirklich von Ihrem Kontext

verwenden Festsetzung

[1] https://issues.apache.org/jira/browse/LUCENE-5472
[2] https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.LengthFilterFactory
[3] https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.TruncateTokenFilterFactory [4] https://wiki.apache.org/solr/UpdateRequestProcessor

+0

[2] wird nur mit einer geringen Zeichengrenze unter 1000 arbeiten sie [3] scheinen scheinen diese Grenze nicht zu haben Aber beide arbeiten nicht für String-Felder, die benutzerdefinierten Analysatoren begrenzen. – Chris

12

Ich hatte das gleiche Problem wie bei Ihnen, schließlich ich mein Problem gelöst. Bitte überprüfen Sie den Typ Ihres "Text" -Feldes, ich vermute, dass es "Strings" sein muss.

Sie können es in dem finden verwalteten Schema des Kerns:

<field name="text" type="strings"/> 

Oder Sie Solr Admin gehen kann, Zugang: http://localhost:8983/solr/CORE_NAME/schema/fieldtypes?wt=json und dann für „Text“ suchen, wenn es etwas ist, wie die folgen, wissen Sie Ihr Feld „Text“ als Zeichentyp definiert:

{ 
    "name":"strings", 
    "class":"solr.StrField", 
    "multiValued":true, 
    "sortMissingLast":true, 
    "fields":["text"], 
    "dynamicFields":["*_ss"]}, 

Dann ist für Sie meine Lösung funktioniert, können Sie die Art von „Strings“ auf „text_general“ in Managed-Schema. (Stellen Sie sicher, dass Art von "text" in schema.xml ist auch "text_general")

<field name="text" type="text_general"> 

dies Ihr Problem lösen wird. strings ist ein string-Feld, aber text_general ist ein Textfeld.

+1

Wow, das hat funktioniert! Gut gemacht :) Vielen Dank. – ygogia

+0

Es hat für mich funktioniert, alle 'strings' in' managed-schema' durch 'text_general' zu ersetzen – Yogesh

Verwandte Themen