使用solrj和schema.xml将实体添加到solr

时间:2012-11-14 09:14:56

标签: java solr solrj

我想将实体添加到文档中,就像使用data-config一样。 目前我正在将我的文档的每个页面编入索引作为单个文档。

现在:

<solrDoc>
<id>1</id>
<docname>test.pdf</docmname>
<pagenumber>1</pagenumber>
<pagecontent>blablabla</pagecontent>
</solrDoc>

<solrDoc>
<id>2</id>
<docname>test.pdf</docmname>
<pagenumber>2</pagenumber>
<pagecontent>blablabla</pagecontent>
</solrDoc>

如您所见,与文档相关的数据存储了x次。我想得到这样的文件:

<doc>
<id>1</id>
<docname>test.pdf</docmname>
<pageEntries> //multivaluefield
<pageEntry><pagenumber>1</pagenumber><pagecontent>blablabla</pagecontent></pageEntry>
<pageEntry><pagenumber>2</pagenumber><pagecontent>blablabla</pagecontent></pageEntry>
</pageEntries>
</doc>

我不知道如何制作像pageEntry这样的东西。我看到solr可以从数据库导入实体,但我想知道我怎么能这样做?(或类似的东西)

我正在使用solr 3.6.1。页面提取由我自己使用pdfbox完成。

Java代码:

SolrInputDocument solrDoc = new SolrInputDocument();
solrDoc.setField("id", 1);
solrDoc.setField("filename", "test");
            for (int p : pages) {
                solrDoc.addField("page", p);
            }
            for (String pc : pagecont) {
                solrDoc.addField("pagecont", pc);
            }

1 个答案:

答案 0 :(得分:1)

如果由您执行提取,您可以将所有页面打包并将其作为单个Solr文档提供,其中包含pagenumber&amp; pagecontent是多值字段。

您可以对所有页面使用相同的ID(ID不是架构定义中的主要字段),并使用分组(Field Collapsing)对文档的结果进行分组。