001: /*
002: * Copyright 2004-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.compass.annotations;
018:
019: import java.lang.annotation.ElementType;
020: import java.lang.annotation.Retention;
021: import java.lang.annotation.RetentionPolicy;
022: import java.lang.annotation.Target;
023:
024: /**
025: * Sepcifies additional meta-data on a {@link SearchableProperty} or
026: * {@link SearchableId}.
027: * <p/>
028: * {@link SearchableId} and {@link SearchableProperty} can be used to
029: * auto-generate meta-data. If more than one meta-data is required, the
030: * {@link SearchableMetaData}/{@link SearchableMetaDatas} can be used.
031: * <p/>
032: * The searchable meta-data is meant to handle basic types (which usually translate to
033: * a String saved in the search engine). The conversion is done using converters, with
034: * Compass providing converters for most basic types. A specialized Converter can be
035: * associated with the auto generated meta-data using {@link #converter()}. The
036: * specialized converter will implement the {@link org.compass.core.converter.Converter}
037: * interface, usually extending the {@link org.compass.core.converter.basic.AbstractBasicConverter}.
038: * <p/>
039: * Another way of defining a converter for a class can be done using the {@link SearchableClassConverter}
040: * to annotate the class that needs conversion, with Compass auto detecting it.
041: * <p/>
042: * Note, that most of the time, a specialized converter for user classes will not be needed,
043: * since the {@link SearchableComponent} usually makes more sense to use.
044: * <p/>
045: * The searchalbe property can annotate a {@link java.util.Collection} type field/property,
046: * supporting either {@link java.util.List} or {@link java.util.Set}. The searchable property
047: * will try and automatically identify the element type using generics, but if the collection
048: * is not defined with generics, {@link SearchableProperty#type()} should be used to hint for
049: * the collection element type.
050: * <p/>
051: * The searchable property can annotate an array as well, with the array element type used for
052: * Converter lookups.
053: *
054: * @author kimchy
055: */
056: @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
057: @Retention(RetentionPolicy.RUNTIME)
058: public @interface SearchableMetaData {
059:
060: /**
061: * The name of the meta-data. The name will be the value the contend will
062: * be saved under, so it can later be searched using "author:london" (here
063: * the name is author).
064: */
065: String name();
066:
067: /**
068: * The boost level for the meta-data. Will cause hits
069: * based on this meta-data to rank higher.
070: */
071: float boost() default 1.0f;
072:
073: /**
074: * Specifies whether and how a meta-data property will be stored.
075: */
076: Store store() default Store.YES;
077:
078: /**
079: * Specifies whether and how a meta-data proeprty should be indexed.
080: */
081: Index index() default Index.TOKENIZED;
082:
083: /**
084: * Specifies whether and how a meta-data property should have term vectors.
085: */
086: TermVector termVector() default TermVector.NO;
087:
088: /**
089: * Expert:
090: * If set, omit normalization factors associated with this indexed field.
091: * This effectively disables indexing boosts and length normalization for this field.
092: */
093: boolean omitNorms() default false;
094:
095: /**
096: * Specifies whether and how the meta-data proeprty should value will be revered.
097: */
098: Reverse reverse() default Reverse.NO;
099:
100: /**
101: * Specifies a specialized analyzer lookup name that will be used to analyze
102: * the meta-data content.
103: * <p/>
104: * Defaults to Compass default analyzer.
105: */
106: String analyzer() default "";
107:
108: /**
109: * Specifies if this meta-data should be excluded from the generated
110: * "all" meta-data.
111: *
112: * @see SearchableAllMetaData#enable()
113: */
114: ExcludeFromAll excludeFromAll() default ExcludeFromAll.NO;
115:
116: /**
117: * The converter lookup name for the given meta-data.
118: * <p/>
119: * Defaults to one of Compass internal converters.
120: */
121: String converter() default "";
122:
123: /**
124: * The format to apply to the value. Only applies to format-able converters
125: * (like dates and numbers).
126: */
127: String format() default "";
128:
129: /**
130: * A null value to use to store in the index when the property has a <code>null</code>
131: * value. Defaults to not storing null values if the globabl setting of
132: * <code>compass.mapping.nullvalue</code> is not set. If it set, disabling the null
133: * value can be done by setting it to {@link org.compass.core.config.CompassEnvironment.NullValue#DISABLE_NULL_VALUE_FOR_MAPPING}
134: * value (<code>$disable$</code>).
135: */
136: String nullValue() default "";
137:
138: /**
139: * Should this propety be included in the spell check index.
140: *
141: * <p>Note, most times this is not requried to be configured, since by default, the
142: * spell check index uses the "all" property.
143: */
144: SpellCheck spellCheck() default SpellCheck.EXCLUDE;
145: }
|