de.tudarmstadt.ukp.dkpro.core.io.solr.util.SolrUtils.java Source code

Java tutorial

Introduction

Here is the source code for de.tudarmstadt.ukp.dkpro.core.io.solr.util.SolrUtils.java

Source

/*
 * Copyright 2016
 * Ubiquitous Knowledge Processing (UKP) Lab
 * Technische Universitt Darmstadt
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package de.tudarmstadt.ukp.dkpro.core.io.solr.util;

import org.apache.commons.collections4.map.SingletonMap;
import org.apache.solr.common.SolrInputDocument;

/**
 * Helper utilities.
 */
public class SolrUtils {
    /**
     * The modifiers available for Solr atomic updates: SET, ADD, INC, REMOVE, REMOVEREGEX.
     *
     * @see <a href=https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents#UpdatingPartsofDocuments-AtomicUpdates>Updating Parts of Documents</a>
     * @see <a
     * href="http://wiki.apache.org/solr/Atomic_Updates">Atomic Updates</a>
     */
    public enum Modifier {
        SET, ADD, INC, REMOVE, REMOVEREGEX
    }

    private static final Modifier DEFAULT_MODIFIER = Modifier.SET;

    /**
     * Add a field and optionally perform a partial update if applicable on an existing document.
     *
     * @param document  the {@link SolrInputDocument} to add/update
     * @param fieldname the field name to add/update
     * @param value     the value to insert for the field.
     * @param update    if true, use Solr atomic update mechanism; otherwise overwrite document
     * @param modifier  The {@link Modifier} to use when performing an atomic update (i.e. iff {@code update}
     *                  is set to true).
     * @see #setField(SolrInputDocument, String, Object, boolean)
     */
    public static void setField(SolrInputDocument document, String fieldname, Object value, boolean update,
            Modifier modifier) {
        if (update) {
            /* perform an atomic update on potentially existing document */
            document.setField(fieldname, new SingletonMap<>(modifier.name().toLowerCase(), value));
        } else {
            document.setField(fieldname, value);
        }
    }

    /**
     * Add a field and optionally perform a partial update on an existing document, using the default atomic update operation ("set").
     *
     * @param document  the {@link SolrInputDocument} to add/update
     * @param fieldname the field name to add/update
     * @param value     the value to insert for the field.
     * @param update    if true, use Solr atomic update mechanism; otherwise overwrite existing document
     * @see #setField(SolrInputDocument, String, Object, boolean, Modifier)
     * @see Modifier
     */
    public static void setField(SolrInputDocument document, String fieldname, Object value, boolean update) {
        setField(document, fieldname, value, update, DEFAULT_MODIFIER);
    }
}