Добавление документа в индекс в SOLR: документ содержит хотя бы один огромный термин
Я добавляю (программой Java) для индексации документ в индекс SOLR, но после add(inputDoc)
Метод есть исключение. Вход в веб-интерфейс solr содержит следующее:
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
Пожалуйста, что я должен сделать, чтобы решить эту проблему?
2 ответа
У меня была та же проблема, что и у тебя, наконец-то я решил свою проблему. Пожалуйста, проверьте тип вашего "текстового" поля, я подозреваю, что это должны быть "строки".
Вы можете найти его в управляемой схеме ядра:
<field name="text" type="strings"/>
Или вы можете перейти к Solr Admin, получить доступ по адресу: http://localhost:8983/solr/CORE_NAME/schema/fieldtypes?wt=json, а затем выполнить поиск "текст", если это что-то вроде следующего, вы знаете, что определили свой текстовое поле в виде типа строки:
{
"name":"strings",
"class":"solr.StrField",
"multiValued":true,
"sortMissingLast":true,
"fields":["text"],
"dynamicFields":["*_ss"]},
Тогда мое решение работает для вас, вы можете изменить тип с "строки" на "text_general" в управляемой схеме. (убедитесь, что тип "text" в schema.xml также "text_general")
<field name="text" type="text_general">
Это решит вашу проблему. strings - это строковое поле, а text_general - текстовое поле.
Вы, вероятно, встречали то, что описано в LUCENE-5472 [1]. Там Lucene выдает ошибку, если срок слишком длинный. Вы могли бы:
использовать (в анализаторе индекса) LengthFilterFactory [2], чтобы отфильтровать те токены, которые не попадают в запрошенный диапазон длин
использовать (в анализаторе индекса) TruncateTokenFilterFactory [3] для определения максимальной длины индексированных токенов
используйте пользовательский UpdateRequestProcessor, но это на самом деле зависит от вашего контекста
[1] https://issues.apache.org/jira/browse/LUCENE-5472
[2] https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
[3] https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters[4] https://wiki.apache.org/solr/UpdateRequestProcessor