Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在solr中的一个请求内上载pdf和更新字段_Solr_Solrj - Fatal编程技术网

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

如何在solr中的一个请求内上载pdf和更新字段,solr,solrj,Solr,Solrj,全部: 我对solr和solrj都是新手。我现在想做的是将pdf文件上传到solr,同时设置自定义字段,如last_modified字段 但我经常遇到错误,例如“上次修改的非多值字段遇到多个值”,我使用solrj上传pdf并将上次修改的字段设置为 ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract"); up.setParam("literal.last_modified", "2011-

全部:

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

但我经常遇到错误,例如“上次修改的非多值字段遇到多个值”,我使用solrj上传pdf并将上次修改的字段设置为

ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
up.setParam("literal.last_modified", "2011-05-19T09:00:00Z");
我猜错误是由于solr提取pdf时,它也使用一些元数据作为上次修改的字段值,因此我的自定义上次修改值导致多值错误,但我想知道如何用自定义数据替换元数据

谢谢

/update/extract是在solrconfig.xml中为您的核心定义的。您可以在那里看到配置,并对其进行修改,使其与您的特定场景相匹配。列表中列出了选项

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

您还可以尝试显式地将Tika的上次更新字段映射到其他名称


我会将catch all(dynamicField*)启用为store=true,并查看捕获的内容。然后你可以玩参数,直到你高兴为止。您不必重新启动Solr,只需从管理UI重新加载core。

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

    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();
Map partialUpdate=new HashMap();
如果(alreadyPresent)
{
partialUpdate.put(“设置”,值);
}否则
{
部分更新。投入(“增加”,价值);
}
doc.addField(“projectId”,projectId);//solrdoc的唯一id
doc.addField(键[0],partialUpdate);
docs.add(doc);
solrServer.add(文档);
提交();

谢谢您的回复。我试图在schema.xml和solrconfig.xml中找到这个literalsoferride,但没有。你能告诉我它在哪里吗?在my schema.xml中,上次修改的字段类似于,而更新/提取处理程序类似于:trueignored\u truelinksigned\u尝试显式设置它,看看它是否有区别。可能Solr的默认版本在不同版本之间有所改变。谢谢回复。我试图在solrconfig.xml中显式地添加它,如下所示:true ignored\uTrue links ignored\uTrue但它不起作用,您认为我还应该配置什么?试试我的其他建议(关于dynamicField),看看会得到什么。如果你仍然被卡住,你可能想在Solr用户邮件列表上问这个问题,那里会有更多的人看到它。谢谢你的回复。我将用solrJ尝试这段代码。但在此之前有一件事是:我的不同情况是,我确信我上传的所有pdf文件都是新的(id以前从未使用过,因此不需要检查alreadyPresent,顺便问一下:如何检查字段是否已经存在?),我只想更新solr pdf index processor使用的某些字段(处理器可能会自动生成上次修改的单值字段)和“上载请求”,而不是提交另一个手动更新请求。您能告诉我如何在上载URL字符串中指定吗?