【问题标题】:solr 4.1 java.lang.IllegalArgumentException: first position increment must be > 0 (got 0)solr 4.1 java.lang.IllegalArgumentException:第一个位置增量必须 > 0(得到 0)
【发布时间】:2013-02-04 22:59:22
【问题描述】:

全部! 在我将我的 solr 版本更新到 4.1 后,重建索引时出现这样的错误:

Warning: Error creating document : SolrInputDocument[dop_pos_state=, dop_country=, dop_first_name_onlySort=Rick, dop_first_name=Rick, dop_sync_flag=true, dop_orgid=1522402, dop_last_name=King, dop_last_name_onlySort=King, dop_invite_flag=true, dop_name=Rick King, dop_metro_area=, dop_create_date=2012-12-15 08:53:55.0, dop_address=Greater Boston Area, dop_job_level=1, dop_id=343218, dop_title=at A & J Engineering Inc., dop_update_date=2013-02-19 09:38:38.0, dop_metromap_id=210, dop_facebook_linked=0, dop_linkedin_linked=0, dop_crunchBase_linked=0, dop_twitter_linked=0] 

java.lang.IllegalArgumentException: first position increment must be > 0 (got 0)
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:125)
at org.apache.lucene.index.DocFieldProcessor.processDocument(DocFieldProcessor.java:306)
at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:250)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:376)

当我删除 schema.xml 中的 dop_title 字段(即“at A & J Engineering Corp.”)时,它可以正常工作。 dop_title的分析器如下:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>

然后我放入solr的分析页面,结果是:

这是怎么发生的,我可以通过什么方式避免这种情况?感谢您的帮助!

【问题讨论】:

  • 当我删除 WordDelimiterFilterFactory 时,它又可以正常工作了,这是问题所在吗? WordDelimiterFilterFactory 与 solr 4.1 不兼容?
  • 我将 WordDelimiterFilterFactory 放在 StopFilterFactory 之前,它也可以正常工作。所以我想也许 WordDelimiterFilterFactory 不能处理空字段。
  • 猜猜这一定是问题所在!我遇到的 WordDelimiterFilterFactory 的示例和用例总是在 WhitespaceTokenizerFactory 之后立即使用它,所以从来没有遇到过这种情况。很高兴知道。
  • 顺便说一句,帖子不要使用真实数据:-)

标签: search solr indexing


【解决方案1】:

令牌处理正在从基于流的迁移到基于图形的处理。这在 Solr 4.1 中发现了一些奇怪的边缘情况。看起来你的就是其中之一(回归)。如果你愿意,你可以打开an issue,有人会看的。

同时,您可能会发现如果您勾选分析页面右侧的“详细输出”小按钮,它会显示有关管道中每个步骤的更多信息,包括位置值.这可以帮助您更快地调试此问题和/或帮助避免它。

【讨论】:

  • 感谢您的帮助,我会尝试“详细输出”:-)
猜你喜欢
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多