Example usage for org.apache.solr.update.processor UpdateRequestProcessor processDelete

List of usage examples for org.apache.solr.update.processor UpdateRequestProcessor processDelete

Introduction

In this page you can find the example usage for org.apache.solr.update.processor UpdateRequestProcessor processDelete.

Prototype

public void processDelete(DeleteUpdateCommand cmd) throws IOException 

Source Link

Usage

From source file:de.qaware.chronix.solr.retention.ChronixRetentionHandler.java

License:Apache License

/**
 * Triggers the deletion//  w  w w  .  j a v a  2s  . co m
 *
 * @param processor - the update processor do process deletions
 * @param req       - the solr query request information
 * @throws Exception
 */
private void deleteOldDocuments(String deletionQuery, UpdateRequestProcessor processor, SolrQueryRequest req)
        throws IOException {
    DeleteUpdateCommand delete = new DeleteUpdateCommand(req);
    delete.setQuery(deletionQuery);
    processor.processDelete(delete);
}

From source file:lux.solr.SolrDocWriter.java

License:Mozilla Public License

private void deleteCloud(DeleteUpdateCommand cmd) throws IOException {
    UpdateRequestProcessorChain updateChain = xqueryComponent.getCore()
            .getUpdateProcessingChain("lux-update-chain");
    SolrQueryResponse rsp = new SolrQueryResponse();
    SolrQueryRequest req = UpdateDocCommand.makeSolrRequest(core);
    UpdateRequestProcessor processor = updateChain.createProcessor(req, rsp);
    processor.processDelete(cmd);
    processor.finish();/*from  ww  w  .j a v  a 2 s  .  co m*/
}

From source file:org.alfresco.solr.SolrInformationServer.java

License:Open Source License

@Override
public void indexNodes(List<Node> nodes, boolean overwrite, boolean cascade) throws IOException, JSONException {
    UpdateRequestProcessor processor = null;
    try (SolrQueryRequest request = newSolrQueryRequest()) {
        processor = this.core.getUpdateProcessingChain(null).createProcessor(request, newSolrQueryResponse());

        Map<Long, Node> nodeIdsToNodes = new HashMap<>();
        EnumMap<SolrApiNodeStatus, List<Long>> nodeStatusToNodeIds = new EnumMap<>(SolrApiNodeStatus.class);
        categorizeNodes(nodes, nodeIdsToNodes, nodeStatusToNodeIds);
        List<Long> deletedNodeIds = mapNullToEmptyList(nodeStatusToNodeIds.get(SolrApiNodeStatus.DELETED));
        List<Long> shardDeletedNodeIds = mapNullToEmptyList(
                nodeStatusToNodeIds.get(SolrApiNodeStatus.NON_SHARD_DELETED));
        List<Long> shardUpdatedNodeIds = mapNullToEmptyList(
                nodeStatusToNodeIds.get(SolrApiNodeStatus.NON_SHARD_UPDATED));
        List<Long> unknownNodeIds = mapNullToEmptyList(nodeStatusToNodeIds.get(SolrApiNodeStatus.UNKNOWN));
        List<Long> updatedNodeIds = mapNullToEmptyList(nodeStatusToNodeIds.get(SolrApiNodeStatus.UPDATED));

        if (!deletedNodeIds.isEmpty() || !shardDeletedNodeIds.isEmpty() || !shardUpdatedNodeIds.isEmpty()
                || !unknownNodeIds.isEmpty()) {
            // fix up any secondary paths
            List<NodeMetaData> nodeMetaDatas = new ArrayList<>();

            // For all deleted nodes, fake the node metadata
            for (Long deletedNodeId : deletedNodeIds) {
                Node node = nodeIdsToNodes.get(deletedNodeId);
                NodeMetaData nodeMetaData = createDeletedNodeMetaData(node);
                nodeMetaDatas.add(nodeMetaData);
            }//from w  w  w .ja v a  2  s.c o m

            if (!unknownNodeIds.isEmpty()) {
                NodeMetaDataParameters nmdp = new NodeMetaDataParameters();
                nmdp.setNodeIds(unknownNodeIds);
                nodeMetaDatas.addAll(repositoryClient.getNodesMetaData(nmdp, Integer.MAX_VALUE));
            }

            for (NodeMetaData nodeMetaData : nodeMetaDatas) {
                Node node = nodeIdsToNodes.get(nodeMetaData.getId());
                if (nodeMetaData.getTxnId() > node.getTxnId()) {
                    // the node has moved on to a later transaction
                    // it will be indexed later
                    continue;
                }

                try {
                    lock(nodeMetaData.getId());

                    solrContentStore.removeDocFromContentStore(nodeMetaData);
                } finally {
                    unlock(nodeMetaData.getId());
                }
            }

            LOGGER.debug("Deleting");
            DeleteUpdateCommand delDocCmd = new DeleteUpdateCommand(request);
            String query = this.cloud.getQuery(FIELD_DBID, OR, deletedNodeIds, shardDeletedNodeIds,
                    shardUpdatedNodeIds, unknownNodeIds);
            delDocCmd.setQuery(query);
            processor.processDelete(delDocCmd);
        }

        if (!updatedNodeIds.isEmpty() || !unknownNodeIds.isEmpty() || !shardUpdatedNodeIds.isEmpty()) {
            LOGGER.info("Updating");
            NodeMetaDataParameters nmdp = new NodeMetaDataParameters();
            List<Long> nodeIds = new LinkedList<>();
            nodeIds.addAll(updatedNodeIds);
            nodeIds.addAll(unknownNodeIds);
            nodeIds.addAll(shardUpdatedNodeIds);
            nmdp.setNodeIds(nodeIds);

            // Fetches bulk metadata
            List<NodeMetaData> nodeMetaDatas = repositoryClient.getNodesMetaData(nmdp, Integer.MAX_VALUE);

            NEXT_NODE: for (NodeMetaData nodeMetaData : nodeMetaDatas) {
                long start = System.nanoTime();

                Node node = nodeIdsToNodes.get(nodeMetaData.getId());
                long nodeId = node.getId();
                try {
                    lock(nodeId);

                    if (nodeMetaData.getTxnId() > node.getTxnId()) {
                        // the node has moved on to a later transaction
                        // it will be indexed later
                        continue;
                    }

                    if (nodeIdsToNodes.get(nodeMetaData.getId())
                            .getStatus() == SolrApiNodeStatus.NON_SHARD_UPDATED) {
                        if (nodeMetaData.getProperties().get(ContentModel.PROP_CASCADE_TX) != null) {
                            indexNonShardCascade(nodeMetaData);
                        }

                        continue;
                    }

                    AddUpdateCommand addDocCmd = new AddUpdateCommand(request);
                    addDocCmd.overwrite = overwrite;

                    // check index control
                    Map<QName, PropertyValue> properties = nodeMetaData.getProperties();
                    StringPropertyValue pValue = (StringPropertyValue) properties
                            .get(ContentModel.PROP_IS_INDEXED);
                    if (pValue != null) {
                        boolean isIndexed = Boolean.valueOf(pValue.getValue());
                        if (!isIndexed) {
                            LOGGER.debug("Clearing unindexed");
                            deleteNode(processor, request, node);

                            SolrInputDocument doc = createNewDoc(nodeMetaData, DOC_TYPE_UNINDEXED_NODE);
                            addDocCmd.solrDoc = doc;
                            if (recordUnindexedNodes) {
                                solrContentStore.storeDocOnSolrContentStore(nodeMetaData, doc);
                                processor.processAdd(addDocCmd);
                            }

                            long end = System.nanoTime();
                            this.trackerStats.addNodeTime(end - start);
                            continue NEXT_NODE;
                        }
                    }

                    // Make sure any unindexed or error doc is removed.
                    deleteNode(processor, request, node);

                    SolrInputDocument doc = createNewDoc(nodeMetaData, DOC_TYPE_NODE);
                    addToNewDocAndCache(nodeMetaData, doc);
                    addDocCmd.solrDoc = doc;
                    processor.processAdd(addDocCmd);

                    long end = System.nanoTime();
                    this.trackerStats.addNodeTime(end - start);
                } finally {
                    unlock(nodeId);
                }
            }
        }
    } catch (Exception e) {
        LOGGER.error("SolrInformationServer problem.", e);
        // Bulk version failed, so do one at a time.
        for (Node node : nodes) {
            this.indexNode(node, true);
        }
    } finally {
        if (processor != null) {
            processor.finish();
        }
    }
}

From source file:org.alfresco.solr.SolrInformationServer.java

License:Open Source License

private void deleteErrorNode(UpdateRequestProcessor processor, SolrQueryRequest request, Node node)
        throws IOException {
    String errorDocId = PREFIX_ERROR + node.getId();
    DeleteUpdateCommand delErrorDocCmd = new DeleteUpdateCommand(request);
    delErrorDocCmd.setId(errorDocId);/*from  w  ww . j  a  v a2 s.c  o  m*/
    processor.processDelete(delErrorDocCmd);
}

From source file:org.alfresco.solr.SolrInformationServer.java

License:Open Source License

private void deleteNode(UpdateRequestProcessor processor, SolrQueryRequest request, long dbid)
        throws IOException {
    DeleteUpdateCommand delDocCmd = new DeleteUpdateCommand(request);
    delDocCmd.setQuery(FIELD_DBID + ":" + dbid);
    processor.processDelete(delDocCmd);
}

From source file:org.alfresco.solr.SolrInformationServer.java

License:Open Source License

private void deleteByQuery(String query) throws IOException {
    UpdateRequestProcessor processor = null;
    try (SolrQueryRequest request = newSolrQueryRequest()) {
        processor = this.core.getUpdateProcessingChain(null).createProcessor(request, newSolrQueryResponse());
        DeleteUpdateCommand delDocCmd = new DeleteUpdateCommand(request);
        delDocCmd.setQuery(query);//from   w  ww  .  jav  a 2  s. com
        processor.processDelete(delDocCmd);
    } finally {
        if (processor != null) {
            processor.finish();
        }
    }
}