0

我正在按照 wiki 页面上给出的示例通过 solrj 索引页面。我已经尝试了各种方法来让它工作,但不知何故,我不断收到一个看起来像这样的错误:

错误:[doc=1] 遇到非多值字段 id 的多个值:[1, 34d47c153efcf221]

我的架构非常简单(仅用于测试)

    <field name="id" type="int" indexed="true" stored="true" required="true" />
    <field name="name" type="string_filename" indexed="true" stored="true" required="true"/>
    <field name="size" type="int" indexed="true" stored="true" required="true"/>
    <field name="created_at" type="date" indexed="true" stored="true"/>
    <field name="updated_at" type="date" indexed="true" stored="true"/>

代码如下所示:

String solrHost = "localhost";
String coreName = "files";
SolrServer solr = null;
try {
    solr = new CommonsHttpSolrServer("http://"+solrHost+":8983/solr/"+coreName);
} catch (Exception e) {
    System.out.println("ERROR:" + e.getMessage());
}

SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", 1);
doc.addField("name", "testfile.pdf");
doc.addField("size", 34234234);

try{
    `solr.add(doc);
}    catch (Exception e) {
    System.out.println("ERROR adding docs: " + e.getMessage());
}

try{
    solr.commit();
} catch (Exception e) {
    System.out.println("commit FAiled.");
}

希望这是我想念的微不足道的事情。任何帮助表示赞赏:)

4

2 回答 2

0

经过大量阅读和实验。我发现了问题所在。为了启用重复数据删除,我需要在模式文件中添加另一个字段。所以像

<field name="signature" type="string" stored="true" indexed="true" multiValued="false" / >

然后在我的 solrconfig 中,我需要在“signatureField”元素中设置这个字段“signature”:

 <updateRequestProcessorChain name="dedupe">
   <processor class="solr.processor.SignatureUpdateProcessorFactory">
     <bool name="enabled">true</bool>
     <str name="signatureField">signature</str>
     <bool name="overwriteDupes">false</bool>
     <str name="fields">id,name</str>
     <str name="signatureClass">solr.processor.Lookup3Signature</str>
   </processor>
   <processor class="solr.LogUpdateProcessorFactory" />
   <processor class="solr.RunUpdateProcessorFactory" />

感谢所有贡献的人!:)

于 2012-04-30T21:54:07.497 回答
0

看起来您正在尝试为 id 索引 2 个值,即 1 和 34d47c153efcf221。

于 2012-04-30T10:22:33.533 回答