【问题标题】:Re-index items in DSpace 6.2 after updating through REST通过 REST 更新后重新索引 DSpace 6.2 中的项目
【发布时间】:2017-09-18 15:02:40
【问题描述】:

我们正在尝试构建一个应用程序,以使用 REST API 对 DSpace 中提取的项目元数据进行批量编辑。更新操作反映在 DSpace UI 中。然而,元数据在 Solr 中保持不变,除非我们运行 index-discovery。由于我们打算处理大量数据,因此每次编辑元数据时运行索引发现会很昂贵。有人可以为此提出解决方法/解决方案吗?

【问题讨论】:

    标签: solr dspace


    【解决方案1】:

    您可以在 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();
    }
    

    【讨论】:

    • 我们实际上恢复到了旧版本的 DSpace (5.6),因为我们真的不想在 DSpace 中进行任何代码级别的修改。希望这个问题在后续版本中得到修复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多