将文档id写入索引的异常;可能的分析错误

时间:2014-10-23 15:15:33

标签: java solr solrj

索引文档时出现上述错误。

<field name="a_suggest" type="my_suggest_field" indexed="true" stored="false"/>
<field name="b_suggest" type="my_suggest_field" indexed="true" stored="false" />
<field name="c_suggest" type="my_suggest_field" indexed="true" stored="false"/>

  <fieldType name="my_suggest_field" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.EdgeNGramFilterFactory" maxGramSize="10" minGramSize="2"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
  </fieldType>

我在打电话时遇到错误。

server.add(documents);

首先,可能的分析错误的含义是什么?它与my_suggest_field索引分析器有关。是否由于索引分析器中的令牌,过滤器的顺序?

感谢。

2 个答案:

答案 0 :(得分:4)

我要回避这个问题,因为这是在寻找这个问题时出现的第一个问题,而且没有一般答案。

尝试使用更新API使用json添加文档时遇到了同样的问题。来找出我在solr中的一个字段没有正确格式化,因为我试图将XML字符串保存到字符串字段中。我不得不将字段更改为text_general。

错误基本上是说您输入的内容可能不适合您的架构。通过一次将它们添加到更新1来检查每个字段。然后根据需要改变。

答案 1 :(得分:3)

我需要为EdgeNGramFilterFactory和普通建议创建单独的字段类型。

  <field name="my_suggest" type="my_suggest_field" indexed="true" stored="false"/>
  <field name="my_suggest_ngram" type="my_suggest_ngram_field" indexed="true" stored="false"/>

  <fieldType name="my_suggest_field" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <filter class="solr.LowerCaseFilterFactory" />
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
  </fieldType>

  <fieldType name="my_suggest_ngram_field" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <filter class="solr.LowerCaseFilterFactory" />
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
  </fieldType>