Solr 通过REST更新后,重新索引DSpace 6.2中的项目

Solr 通过REST更新后,重新索引DSpace 6.2中的项目,solr,dspace,Solr,Dspace,我们正在尝试构建一个应用程序,使用RESTAPI对在DSpace中摄取的项元数据进行批量编辑。更新操作将反映在DSpace用户界面中。但是,元数据在Solr中保持不变,除非我们运行索引发现。因为我们打算处理大量数据,所以每次编辑元数据时运行索引发现将非常昂贵。有人能为这个问题提出解决方案吗?您可以在REST端点的Java类中触发项更新 例如: 在表示/items rest端点的java类org.dspace.rest.ItemsResource的addItemMetadata方法中,可以在更改项

我们正在尝试构建一个应用程序,使用RESTAPI对在DSpace中摄取的项元数据进行批量编辑。更新操作将反映在DSpace用户界面中。但是,元数据在Solr中保持不变,除非我们运行索引发现。因为我们打算处理大量数据,所以每次编辑元数据时运行索引发现将非常昂贵。有人能为这个问题提出解决方案吗?

您可以在REST端点的Java类中触发项更新

例如: 在表示/items rest端点的java类org.dspace.rest.ItemsResource的addItemMetadata方法中,可以在更改项元数据后添加以下行:

itemService.update(context, dspaceItem);
这行代码触发该特定项的索引更新

这就是完成上述更改后完整addItemMetadata方法的外观:

@POST
@Path("/{item_id}/metadata")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response addItemMetadata(@PathParam("item_id") String itemId, List<org.dspace.rest.common.MetadataEntry> metadata,
        @QueryParam("userIP") String user_ip, @QueryParam("userAgent") String user_agent,
        @QueryParam("xforwardedfor") String xforwardedfor, @Context HttpHeaders headers, @Context HttpServletRequest request)
        throws WebApplicationException
{

    log.info("Adding metadata to item(id=" + itemId + ").");
    org.dspace.core.Context context = null;

    try
    {
        context = createContext();
        org.dspace.content.Item dspaceItem = findItem(context, itemId, org.dspace.core.Constants.WRITE);

        writeStats(dspaceItem, UsageEvent.Action.UPDATE, user_ip, user_agent, xforwardedfor, headers, request, context);

        for (MetadataEntry entry : metadata)
        {
            // TODO Test with Java split
            String data[] = mySplit(entry.getKey()); // Done by my split, because of java split was not function.
            if ((data.length >= 2) && (data.length <= 3))
            {
                itemService.addMetadata(context, dspaceItem, data[0], data[1], data[2], entry.getLanguage(), entry.getValue());
            }
        }

        itemService.update(context, dspaceItem);
        context.complete();

    }
    catch (SQLException e)
    {
        processException("Could not write metadata to item(id=" + itemId + "), SQLException. Message: " + e, context);
    }
    catch (ContextException e)
    {
        processException("Could not write metadata to item(id=" + itemId + "), ContextException. Message: " + e.getMessage(),
                context);
    } catch (AuthorizeException e) {
        processException("Could not update item(id=" + itemId + "), AuthorizeException. Message: " + e.getMessage(),
                context);
    } finally
    {
        processFinally(context);
    }

    log.info("Metadata to item(id=" + itemId + ") were successfully added.");
    return Response.status(Status.OK).build();
}
@POST
@路径(“/{item_id}/metadata”)
@使用({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
公共响应addItemMetadata(@PathParam(“item_id”)字符串itemId,列表元数据,
@QueryParam(“userIP”)字符串user\u ip、@QueryParam(“userAgent”)字符串user\u agent、,
@QueryParam(“xforwardedfor”)字符串xforwardedfor、@Context-HttpHeaders-headers、@Context-HttpServletRequest-request)
抛出WebApplicationException
{
log.info(“将元数据添加到项(id=“+itemId+”);
org.dspace.core.Context Context=null;
尝试
{
context=createContext();
org.dspace.content.Item dspaceItem=findItem(context,itemId,org.dspace.core.Constants.WRITE);
writeStats(dspaceItem、UsageEvent.Action.UPDATE、用户ip、用户代理、xForwardFor、头、请求、上下文);
for(元数据条目:元数据)
{
//使用Java split进行TODO测试
字符串数据[]=mySplit(entry.getKey());//由我的拆分完成,因为java拆分不起作用。

如果((data.length>=2)和(&)(data.length),我们实际上恢复到了较旧版本的DSpace(5.6),因为我们不想在DSpace中进行任何代码级修改。希望此问题在后续版本中得到解决