2015-04-04 13 views
9

Dodaję (przez program Java) do indeksowania, dokument w indeksie SOLR, ale po metodzie add(inputDoc) istnieje wyjątek. Logowanie w interfejsie internetowym solr zawiera:Dodawanie dokumentu do indeksu w SOLR: Dokument zawiera co najmniej jeden ogromny termin

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 

Proszę, co należy zrobić, aby rozwiązać ten problem?

Odpowiedz

5

Prawdopodobnie spotkałeś się z tym, co opisano w LUCENE-5472 [1]. Tam Lucene popełnia błąd, jeśli termin jest zbyt długi. Możesz:

  • zastosowanie (w analizatorze indeksu), A LengthFilterFactory [2], aby odfiltrować te znaki, które nie wchodzą withing Wezwana zakres długości

  • wykorzystanie (w analizatorze indeksu) , a TruncateTokenFilterFactory [3] do mocowania max długość indeksowanych tokenów

  • użyć niestandardowego UpdateRequestProcessor, ale to faktycznie zależy od kontekstu

[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] będzie działać tylko z niskim limitem znaków pod 1000 wydaje [3] wydaje się nie mieć tego limitu Ale oboje nie pracują na polach smyczkowych, które ograniczają niestandardowych analizatorów. – Chris

12

że ten sam problem jak szacunku, wreszcie rozwiązał problem. Proszę sprawdzić typ pola "tekstowego", podejrzewam, że musi to być "łańcuch".

Można go znaleźć w zarządzanych schematu rdzenia:

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

Albo można przejść do Solr administratora dostęp: http://localhost:8983/solr/CORE_NAME/schema/fieldtypes?wt=json a następnie szukać „tekst”, jeżeli jest to coś kontynuacja, wiesz zdefiniowany swój „tekst” boiska w rodzaju teksty:

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

Wtedy moje rozwiązanie działa dla Ciebie, można zmienić typ z „strun” do „text_general” w zarządzanych schematu. (Upewnij się, że typ "text" w schema.xml jest również "text_general")

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

To rozwiąże problem. string jest polem ciągu, ale text_general jest polem tekstowym.

+1

Wow to zadziałało! Dobra robota :) Wielkie dzięki. – ygogia

+0

Przerobiono wszystkie "łańcuchy" w 'zarządzanym schemacie' na' text_general' – Yogesh

Powiązane problemy