/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xcmis.search.lucene.index; /** * Defines field names that are used internally to store UUID, etc in the search * index. */ public class 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 table tame field. */ public static final String TABLE_NAME = "TABLE_NAME:".intern(); /** * Prefix for all field names that are fulltext indexed by property name. */ public static final String FULLTEXT_PREFIX = "FULL:"; /** * Prefix for all field names that are indexed as single term by property * name. */ public static final String PROPERTY_PREFIX = "PROP:"; /** * Name of the field that contains the label of the node. Terms are not * tokenized. */ public static final String LENGTH_PREFIX = "LENGTH:"; /** * 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 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. */ @Deprecated 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(); /** * Private constructor. */ private FieldNames() { } /** * Returns a length field name. * * @param fieldName the property name * @return length field name */ public static String createFieldLengthName(String fieldName) { int idx = fieldName.indexOf(':'); return fieldName.substring(0, idx + 1) + FieldNames.LENGTH_PREFIX + fieldName.substring(idx + 1); } /** * Returns a named value for use as a term in the index. The named value is of * the form: <code>fieldName</code> + '\uFFFF' + value * * @param fieldName the field name. * @param value the value. * @return value prefixed with field name. */ public static String createFullTextFieldName(String fieldName) { int idx = fieldName.indexOf(':'); return fieldName.substring(0, idx + 1) + FieldNames.FULLTEXT_PREFIX + fieldName.substring(idx + 1); } /** * Returns a named value for use as a term in the index. The named value is of * the form: <code>fieldName</code> + '\uFFFF' + value * * @param fieldName the field name. * @param value the value. * @return value prefixed with field name. */ @Deprecated public static String createNamedValue(String fieldName, String value) { return fieldName + '\uFFFF' + value; } /** * Returns a named value for use as a term in the index. The named value is of * the form: <code>fieldName</code> + '\uFFFF' + value * * @param fieldName the field name. * @param value the value. * @return value prefixed with field name. * @param propertyName * @return */ public static String createPropertyFieldName(String propertyName) { int idx = propertyName.indexOf(':'); return propertyName.substring(0, idx + 1) + FieldNames.PROPERTY_PREFIX + propertyName.substring(idx + 1); } /** * 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 * (\uFFFF). */ public static int getNameLength(String namedValue) { return namedValue.indexOf('\uFFFF') + 1; } }