如何在solr中的一个请求中上传pdf和更新字段

时间:2015-01-06 19:42:52

标签: solr solrj

所有

我是solr和solrj的新手。我现在要做的是将pdf文件上传到solr并同时设置自定义字段,例如last_modified字段。

但我一直遇到错误,例如“非multiValued字段last_modified遇到多个值”,我使用solrj上传pdf并设置last_modified字段,如

ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
up.setParam("literal.last_modified", "2011-05-19T09:00:00Z");

我猜错误是由于当solr提取pdf时,它使用一些元数据作为last_modified字段值,以便我的custmized last_modified值导致多值错误,但我想知道如何替换元我的客户数据的数据

由于

2 个答案:

答案 0 :(得分:0)

/ update / extract solrconfig.xml 中为您的核心定义。您可以在那里查看配置并对其进行修改以使其与您的特定方案相匹配。 Reference Guide列出了选项。

在您的特定场景中,某些内容看起来很奇怪。似乎相关的参数是 literalsOverride ,但默认情况下为true。也许,你将它设置为某处 false

您还可以尝试将Tika的最后更新字段显式地映射到某个不同的名称。

我会将catch-all(dynamicField *)设为 store = true 并查看正在捕获的内容。然后你可以玩这些参数直到你开心。您不必重新启动Solr,只需从管理UI中重新加载核心。

答案 1 :(得分:0)

我遇到过类似的问题,我需要获取一个动态字段值并执行一些操作然后更新它。我使用下面的代码来实现这一点。 首先检查该字段是否存在。尝试使用以下代码可能会对您有所帮助。

    Map<String, String> partialUpdate = new HashMap<String, String>();
    if(alreadyPresent)
        {
            partialUpdate.put("set", value);
        }else
        {
            partialUpdate.put("add", value); 
        }

        doc.addField("projectId", projectId); // unique id for solrdoc 
        doc.addField(keys[0], partialUpdate); 

        docs.add(doc);
        solrServer.add(docs);
        solrServer.commit();