在Solr中使用ContentStreamUpdateRequest设置多值字段

时间:2014-02-03 19:34:56

标签: java solr solrj solr-cell

我使用SolrJ + SolrCell索引各种Word / Excel / PDF文件的内容,但是我想要自己设置一些字段(例如id,name):

ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract");
req.addFile(docFile, null);
req.setParam("literal.id", docProperties.getId());
req.setParam("literal.name", docProperties.getName());

我对普通字段没有任何问题,但我发现当我尝试使用同样的setParam方法设置多值字段时,只存储输入数组中的最后一个元素:

if (docProperties.getCategories() != null) {
    for (String category : docProperties.getCategories()) {
        req.setParam("literal.categories", category);
    }
}

例如,如果docProperties.getCategories()是["新闻","计算机","技术"],则存储在多值类别中的唯一值领域是[" Tech"]。我实际上对此并不感到惊讶,因为我不认为使用setParam方法是将值附加到多值字段的正确方法。

但是,我不知道如何使用可用的ContentStreamUpdateRequest方法执行此操作。如果我正在使用SolrInputDocument,那么将数组传递给addField方法就是一件简单的事。

String[] categoriesArray = {"News", "Computers", "Tech"};
ArrayList<String> categories = new ArrayList<String>(Arrays.asList(categoriesArray));
doc.addField("categories", categories );

有没有办法使用ContentStreamUpdateRequest做同样的事情?

1 个答案:

答案 0 :(得分:0)

http://wiki.apache.org/solr/ExtractingRequestHandler#SolrJ开始,使用ModifiableSolrParams设置这些文字参数适用于多值字段。