⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 indexschemafield.java

📁 lucene2.2.0版本
💻 JAVA
字号:
/** * 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.apache.lucene.gdata.search.config;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.document.Field;import org.apache.lucene.document.Field.Index;import org.apache.lucene.document.Field.Store;import org.apache.lucene.gdata.search.analysis.ContentStrategy;import org.apache.lucene.gdata.search.analysis.GdataCategoryStrategy;import org.apache.lucene.gdata.search.analysis.GdataDateStrategy;import org.apache.lucene.gdata.search.analysis.HTMLStrategy;import org.apache.lucene.gdata.search.analysis.KeywordStrategy;import org.apache.lucene.gdata.search.analysis.MixedContentStrategy;import org.apache.lucene.gdata.search.analysis.PlainTextStrategy;import org.apache.lucene.gdata.search.analysis.XHtmlStrategy;import org.apache.lucene.gdata.utils.ReflectionUtils;/** * Each field in the search index is defined by a instance of * {@link IndexSchemaField}. The schema definition will be loaded at startup * and the defined values will be set to instances of this class. Each * constructed field will be passed to an instance of * {@link org.apache.lucene.gdata.search.config.IndexSchema}. * <p> * IndexSchemaField contains all informations about how the content from * incoming entries has to be extracted and how the actual content has to be * index into the lucene index. * </p> * <p> * Each field will have a defined * {@link org.apache.lucene.gdata.search.analysis.ContentStrategy} which does * process the extraction of the field content from an incoming entry. * </p> * @see org.apache.lucene.gdata.search.analysis.ContentStrategy * @see org.apache.lucene.gdata.search.config.IndexSchema *  * @author Simon Willnauer *  */public class IndexSchemaField {    /**     * Default value for Field.Store      * @see org.apache.lucene.document.Field     */    public static final Store DEFAULT_STORE_STRATEGY = Field.Store.NO;    /**     * Default value for Field.Index     * @see org.apache.lucene.document.Field     */    public static final Index DEFAULT_INDEX_STRATEGY = Field.Index.TOKENIZED;    private static final float DEFAULT_BOOST = 1.0f;    private static final float MINIMAL_BOOST = 0.1f;    private float boost = DEFAULT_BOOST;    private String name;    private ContentType contentType;    private Index index = DEFAULT_INDEX_STRATEGY;    private Store store = DEFAULT_STORE_STRATEGY;    private String path;    private String typePath;    private Class<? extends Analyzer> analyzerClass;    private Class<? extends ContentStrategy> fieldClass;    /**     * Constructs a new SchemaField <br>     * Default values:     * <ol>     * <li>boost: <i>1.0</i></li>     * <li>index: <i>TOKENIZED</i></li>     * <li>store: <i>NO</i></li>     * </ol>     */    public IndexSchemaField() {        super();    }    boolean checkRequieredValues(){        /*         * This class will be inst. by the reg builder.         * Check all values to be set. otherwise return false.         * false will cause a runtime exception in IndexSchema         */        boolean returnValue = (this.name != null&&this.path!=null&&this.contentType!=null&&this.index!=null&&this.store!=null&&this.boost>=MINIMAL_BOOST);        if(this.contentType == ContentType.CUSTOM)            returnValue &=this.fieldClass!=null;        else if(this.contentType == ContentType.MIXED)            returnValue &=this.typePath!=null;                return returnValue;    }    /**     * @return Returns the alanyzerClass.     */    public Class<? extends Analyzer> getAnalyzerClass() {        return this.analyzerClass;    }    /**     * @param alanyzerClass     *            The alanyzerClass to set.     */    public void setAnalyzerClass(Class<? extends Analyzer> alanyzerClass) {        this.analyzerClass = alanyzerClass;    }    /**     * @return Returns the fieldClass.     */    public Class<? extends ContentStrategy> getFieldClass() {        return this.fieldClass;    }    /**     * Sets the class or strategy is used to extract this field Attention: this     * method set the contentTyp to {@link ContentType#CUSTOM}     *      * @param fieldClass     *            The fieldClass to set.     */    public void setFieldClass(Class<? extends ContentStrategy> fieldClass) {        if(fieldClass == null)            throw new IllegalArgumentException("ContentStrategy must not be null");        if(!ReflectionUtils.extendsType(fieldClass,ContentStrategy.class))            throw new RuntimeException("The configured ContentStrategy does not extend ContentStrategy, can not use as a custom strategy -- "+fieldClass.getName());        if(!ReflectionUtils.hasDesiredConstructor(fieldClass,new Class[]{IndexSchemaField.class}))            throw new RuntimeException("Can not create instance of "+fieldClass.getName());        this.fieldClass = fieldClass;        /*         * set custom - field class is only needed by custom         */        this.contentType = ContentType.CUSTOM;    }    /**     * @return Returns the index.     */    public Index getIndex() {        return this.index;    }    /**     * @param index     *            The index to set.     */    public void setIndex(Index index) {        this.index = index;    }    /**     * @return Returns the name.     */    public String getName() {        return this.name;    }    /**     * @param name     *            The name to set.     */    public void setName(String name) {        this.name = name;    }    /**     * @return Returns the path.     */    public String getPath() {        return this.path;    }    /**     * @param path     *            The path to set.     */    public void setPath(String path) {        this.path = path;    }    /**     * @return Returns the store.     */    public Store getStore() {        return this.store;    }    /**     * @param store     *            The store to set.     */    public void setStore(Store store) {        this.store = store;    }    /**     * @return Returns the type.     */    public ContentType getContentType() {        return this.contentType;    }    /**     * @param type     *            The type to set.     */    public void setContentType(ContentType type) {        this.contentType = type;    }    /**     * Sets the content type of this field by the name of the enum type. This     * method is not case sensitive.     *      * @param type -     *            type name as string     */    public void setType(String type) {        ContentType[] types = ContentType.class.getEnumConstants();        for (int i = 0; i < types.length; i++) {            if (types[i].name().toLowerCase().equals(type)) {                this.contentType = types[i];                break;            }        }    }    /**     * Defines the {@link ContentStrategy} to use for a     * <tt>IndexSchemaField</tt> to extract the content from the entry     *      * @author Simon Willnauer     *      */    public enum ContentType {               /**         * HTML content strategy {@link HTMLStrategy }         */        HTML,        /**         * XHTML content strategy {@link XHtmlStrategy }         */        XHTML,        /**         * Text content strategy {@link PlainTextStrategy }         */        TEXT,        /**         * GDataDate content strategy {@link GdataDateStrategy }         */        GDATADATE,        /**         * KEYWORD content strategy {@link KeywordStrategy }         */        KEYWORD,        /**         * Category content strategy {@link GdataCategoryStrategy }         */        CATEGORY,        /**         * Custom content strategy (user defined)         */        CUSTOM,        /**         * Mixed content strategy {@link MixedContentStrategy }         */        MIXED    }    /**     * @return Returns the boost.     */    public float getBoost() {        return this.boost;    }    /**     * @param boost     *            The boost to set.     */    public void setBoost(float boost) {        if (boost <= 0)            return;        this.boost = boost;    }    /**     * @see java.lang.Object#toString()     */    @Override    public String toString() {        StringBuilder builder = new StringBuilder(this.getClass()                .getSimpleName()).append(" ");        builder.append("field name: ").append(this.name).append(" ");        builder.append("path: ").append(this.path).append(" ");        builder.append("content type ").append(this.contentType).append(" ");        builder.append("field class: ").append(this.fieldClass).append(" ");        builder.append("analyzer: ").append(this.analyzerClass).append(" ");        builder.append("boost: ").append(this.boost).append(" ");        builder.append("INDEX: ").append(this.index).append(" ");        builder.append("STORE: ").append(this.store);        return builder.toString();    }    /**     * Sets the Store class by simple name     *      * @param name -     *            one of yes, no, compress     */    public void setStoreByName(String name) {        if (name.toLowerCase().equals("yes"))            this.store = Field.Store.YES;        else if (name.toLowerCase().equals("no"))            this.store = Field.Store.NO;        else if (name.toLowerCase().equals("compress"))            this.store = Field.Store.COMPRESS;    }    /**     * Sets the Index class by simple name     *      * @param name -     *            un_tokenized, tokenized, no, no_norms     */    public void setIndexByName(String name) {        if (name.toLowerCase().equals("un_tokenized"))            this.index = Field.Index.UN_TOKENIZED;        else if (name.toLowerCase().equals("tokenized"))            this.index = Field.Index.TOKENIZED;        else if (name.toLowerCase().equals("no_norms"))            this.index = Field.Index.NO_NORMS;        else if (name.toLowerCase().equals("no"))            this.index = Field.Index.NO;    }    /**     * @return Returns the typePath.     */    public String getTypePath() {        return this.typePath;    }    /**     * @param typePath     *            The typePath to set.     */    public void setTypePath(String typePath) {        this.typePath = typePath;        /*         * set Mixed - this property is only needed by mixed type         */        setContentType(ContentType.MIXED);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -