在SOLR:document中将文档添加到索引中至少包含一个术语

在SOLR:document中将文档添加到索引中至少包含一个术语,solr,Solr,我(通过Java程序)在SOLR index中添加了一个用于索引的文档,但是在add(inputDoc)方法之后出现了一个异常。登录solr web界面包含以下内容: 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),

我(通过Java程序)在SOLR index中添加了一个用于索引的文档,但是在
add(inputDoc)
方法之后出现了一个异常。登录solr web界面包含以下内容:

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

请问我该怎么解决这个问题

您可能遇到了LUCENE-5472[1]中描述的内容。在这里,如果一个术语太长,Lucene会抛出一个错误。你可以:

  • 使用(在索引分析器中)LengthFilterFactory[2]来过滤掉那些不属于请求长度范围的令牌

  • (在索引分析器中)使用TruncateTokenFilterFactory[3]来固定索引令牌的最大长度

  • 使用自定义UpdateRequestProcessor,但这实际上取决于您的上下文

[1]
[2]
[3]
[4]

我和你有同样的问题,最后我解决了我的问题。请检查“文本”字段的类型,我怀疑它一定是“字符串”

您可以在core的托管模式中找到它:

<field name="text" type="strings"/>
然后我的解决方案对您有效,您可以在托管模式中将类型从“strings”更改为“text\u general”。(确保schema.xml中的“text”类型也是“text\u general”)



这会解决你的问题。字符串是字符串字段,但文本\u general是文本字段。

[2]仅适用于1000以下的低字符限制[3]似乎没有此限制,但两者都不适用于限制自定义分析器的字符串字段。我可以将
托管架构中的所有
字符串
替换为
文本\u常规
  {
  "name":"strings",
  "class":"solr.StrField",
  "multiValued":true,
  "sortMissingLast":true,
  "fields":["text"],
  "dynamicFields":["*_ss"]},
   <field name="text" type="text_general">