/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.exoplatform.services.jcr.impl.core.query.lucene;
/**
* Defines field names that are used internally to store UUID, etc in the
* search index.
*/
public class FieldNames {
/**
* Private constructor.
*/
private FieldNames() {
}
/**
* Name of the field that contains the UUID of the node. Terms are stored
* but not tokenized.
*/
public static final String UUID = "_:UUID".intern();
/**
* Name of the field that contains the fulltext index including terms
* from all properties of a node. Terms are tokenized.
*/
public static final String FULLTEXT = "_:FULLTEXT".intern();
/**
* Prefix for all field names that are fulltext indexed by property name.
*/
public static final String FULLTEXT_PREFIX = "FULL:";
/**
* Name of the field that contains the UUID of the parent node. Terms are
* stored and but not tokenized.
*/
public static final String PARENT = "_:PARENT".intern();
/**
* Name of the field that contains the label of the node. Terms are not
* tokenized.
*/
public static final String LABEL = "_:LABEL".intern();
/**
* Name of the field that contains the local name of the node. Terms are not
* tokenized.
*/
public static final String LOCAL_NAME = "_:LOCAL_NAME".intern();
/**
* Name of the field that contains the index of the item.
*/
public static final String INDEX = "_:INDEX".intern();
/**
* Name of the field that contains the relative path of the item.
*/
public static final String PATH = "_:PATH".intern();
/**
* Name of the field that contains the namespace URI of the node name. Terms
* are not tokenized.
*/
public static final String NAMESPACE_URI = "_:NAMESPACE_URI".intern();
/**
* Name of the field that contains the names of multi-valued properties that
* hold more than one value. Terms are not tokenized and not stored, only
* indexed.
*/
public static final String MVP = "_:MVP".intern();
/**
* Name of the field that contains all values of properties that are indexed
* as is without tokenizing. Terms are prefixed with the property name.
*/
public static final String PROPERTIES = "_:PROPERTIES".intern();
/**
* Name of the field that contains the names of all properties that are set
* on an indexed node.
*/
public static final String PROPERTIES_SET = "_:PROPERTIES_SET".intern();
/**
* Name of the field that contains the UUIDs of the aggregated nodes. The
* terms are not tokenized and not stored, only indexed.
*/
public static final String AGGREGATED_NODE_UUID = "_:AGGR_NODE_UUID".intern();
/**
* Name of the field that contains the lengths of properties. The lengths
* are encoded using {@link #createNamedLength(String, long)}.
*/
public static final String PROPERTY_LENGTHS = "_:PROPERTY_LENGTHS".intern();
/**
* Name of the field that marks nodes that require reindexing because the
* text extraction process timed out. See also IndexingQueue.
*/
public static final String REINDEXING_REQUIRED = "_:REINDEXING_REQUIRED".intern();
/**
* Name of the field that marks shareable nodes.
*/
public static final String SHAREABLE_NODE = "_:SHAREABLE_NODE".intern();
/**
* Returns a named length for use as a term in the index. The named length
* is of the form: <code>propertyName</code> + '[' +
* {@link LongField#longToString(long)}.
*
* @param propertyName a property name.
* @param length the length of the property value.
* @return the named length string for use as a term in the index.
*/
public static String createNamedLength(String propertyName, long length) {
return propertyName + '[' + LongField.longToString(length);
}
/**
* Returns a named value for use as a term in the index. The named
* value is of the form: <code>fieldName</code> + '[' + value
*
* @param fieldName the field name.
* @param value the value.
* @return value prefixed with field name.
*/
public static String createNamedValue(String fieldName, String value) {
return fieldName + '[' + value;
}
/**
* Returns the length of the field prefix in <code>namedValue</code>. See
* also {@link #createNamedValue(String, String)}. If <code>namedValue</code>
* does not contain a name prefix, this method return 0.
*
* @param namedValue the named value as created by {@link #createNamedValue(String, String)}.
* @return the length of the field prefix including the separator char '['.
*/
public static int getNameLength(String namedValue) {
return namedValue.indexOf('[') + 1;
}
}