Yonik: can you clarify some of the items I labeled "TODO" ... I'm a little
lost in understanding the distinction between internal, external, stored,
indexed, and readable values.


: Date: Tue, 06 Jun 2006 07:53:41 -0000
: From: [EMAIL PROTECTED]
: Reply-To: solr-dev@lucene.apache.org
: To: solr-commits@lucene.apache.org
: Subject: svn commit: r412029 - in /incubator/solr/trunk: build.xml
:     src/java/org/apache/solr/schema/FieldType.java
:     src/java/org/apache/solr/schema/IndexSchema.java
:     src/java/org/apache/solr/schema/SchemaField.java
:
: Author: hossman
: Date: Tue Jun  6 00:53:40 2006
: New Revision: 412029
:
: URL: http://svn.apache.org/viewvc?rev=412029&view=rev
: Log:
: more improvements to javadocs
:
: Modified:
:     incubator/solr/trunk/build.xml
:     incubator/solr/trunk/src/java/org/apache/solr/schema/FieldType.java
:     incubator/solr/trunk/src/java/org/apache/solr/schema/IndexSchema.java
:     incubator/solr/trunk/src/java/org/apache/solr/schema/SchemaField.java
:
: Modified: incubator/solr/trunk/build.xml
: URL: 
http://svn.apache.org/viewvc/incubator/solr/trunk/build.xml?rev=412029&r1=412028&r2=412029&view=diff
: ==============================================================================
: --- incubator/solr/trunk/build.xml (original)
: +++ incubator/solr/trunk/build.xml Tue Jun  6 00:53:40 2006
: @@ -92,7 +92,24 @@
:
:
:    <target name="javadoc" depends="compile">
: +
:      <mkdir dir="${build.javadoc}"/>
: +
: +    <!-- we do this to make sure whatever classes where in ant's
: +         classpath at runtime are in the classpath used by javadoc
: +         (ie: junit.jar)
: +     -->
: +    <path id="javadoc.classpath">
: +       <path refid="compile.classpath"/>
: +       <!-- aparently ant.library.dir isn't allways set right? -->
: +       <fileset dir="${ant.home}/lib">
: +          <include name="**/*.jar"/>
: +       </fileset>
: +       <fileset dir="${ant.library.dir}">
: +          <include name="**/*.jar"/>
: +       </fileset>
: +    </path>
: +
:      <javadoc
:        destdir="${build.javadoc}"
:        author="true"
: @@ -109,7 +126,7 @@
:          <link href="${javadoc.link.java}"/>
:          <link href="${javadoc.link.junit}"/>
:          <link href="${javadoc.link.lucene}"/>
: -        <classpath refid="compile.classpath"/>
: +        <classpath refid="javadoc.classpath"/>
:      </javadoc>
:    </target>
:
:
: Modified: incubator/solr/trunk/src/java/org/apache/solr/schema/FieldType.java
: URL: 
http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/schema/FieldType.java?rev=412029&r1=412028&r2=412029&view=diff
: ==============================================================================
: --- incubator/solr/trunk/src/java/org/apache/solr/schema/FieldType.java 
(original)
: +++ incubator/solr/trunk/src/java/org/apache/solr/schema/FieldType.java Tue 
Jun  6 00:53:40 2006
: @@ -44,12 +44,17 @@
:  public abstract class FieldType extends FieldProperties {
:    public static final Logger log = 
Logger.getLogger(FieldType.class.getName());
:
: -  protected String typeName;  // the name of the type, not the name of the 
field
: -  protected Map<String,String> args;  // additional arguments
: -  protected int trueProperties;   // properties explicitly set to true
: -  protected int falseProperties;  // properties explicitly set to false
: +  /** The name of the type (not the name of the field) */
: +  protected String typeName;
: +  /** additional arguments specified in the field type declaration */
: +  protected Map<String,String> args;
: +  /** properties explicitly set to true */
: +  protected int trueProperties;
: +  /** properties explicitly set to false */
: +  protected int falseProperties;
:    int properties;
:
: +  /** Returns true if fields of this type should be tokenized */
:    protected boolean isTokenized() {
:      return (properties & TOKENIZED) != 0;
:    }
: @@ -105,6 +110,7 @@
:      }
:    }
:
: +  /** :TODO: document this method */
:    protected void restrictProps(int props) {
:      if ((properties & props) != 0) {
:        throw new RuntimeException("schema fieldtype " + typeName
: @@ -113,7 +119,7 @@
:      }
:    }
:
: -
: +  /** The Name of this FieldType as specified in the schema file */
:    public String getTypeName() {
:      return typeName;
:    }
: @@ -131,19 +137,31 @@
:    }
:
:
: -  // used for adding a document when a field needs to be created from a type 
and a string
: -  // by default, the indexed value is the same as the stored value (taken 
from toInternal())
: -  // Having a different representation for external, internal, and indexed 
would present quite
: -  // a few problems given the current Lucene architecture.  An analyzer for 
adding docs would
: -  // need to translate internal->indexed while an analyzer for querying 
would need to
: -  // translate external->indexed.
: -  //
: -  // The only other alternative to having internal==indexed would be to have
: -  // internal==external.
: -  // In this case, toInternal should convert to the indexed representation,
: -  // toExternal() should do nothing, and createField() should *not* call 
toInternal,
: -  // but use the external value and set tokenized=true to get Lucene to 
convert
: -  // to the internal(indexed) form.
: +  /**
: +   * Used for adding a document when a field needs to be created from a
: +   * type and a string.
: +   *
: +   * <p>
: +   * By default, the indexed value is the same as the stored value
: +   * (taken from toInternal()).   Having a different representation for
: +   * external, internal, and indexed would present quite a few problems
: +   * given the current Lucene architecture.  An analyzer for adding docs
: +   * would need to translate internal->indexed while an analyzer for
: +   * querying would need to translate external-&gt;indexed.
: +   * </p>
: +   * <p>
: +   * The only other alternative to having internal==indexed would be to have
: +   * internal==external.   In this case, toInternal should convert to
: +   * the indexed representation, toExternal() should do nothing, and
: +   * createField() should *not* call toInternal, but use the external
: +   * value and set tokenized=true to get Lucene to convert to the
: +   * internal(indexed) form.
: +   * </p>
: +   *
: +   * :TODO: clean up and clarify this explanation.
: +   *
: +   * @see #toInternal
: +   */
:    public Field createField(SchemaField field, String externalVal, float 
boost) {
:      String val;
:      try {
: @@ -162,31 +180,40 @@
:    }
:
:
: -  // Convert an external value (from XML update command or from query string)
: -  // into the internal format.
: -  // - used in delete when a Term needs to be created.
: -  // - used by the default getTokenizer() and createField()
: +  /**
: +   * Convert an external value (from XML update command or from query string)
: +   * into the internal format.
: +   * @see #toExternal
: +   */
:    public String toInternal(String val) {
: +    // - used in delete when a Term needs to be created.
: +    // - used by the default getTokenizer() and createField()
:      return val;
:    }
:
: -  // Convert the stored-field format to an external (string, human readable) 
value
: -  // currently used in writing XML of the search result (but perhaps
: -  // a more efficient toXML(Field f, Writer w) should be used
: -  // in the future.
: +  /**
: +   * Convert the stored-field format to an external (string, human readable)
: +   * value
: +   * @see #toInternal
: +   */
:    public String toExternal(Field f) {
: +    // currently used in writing XML of the search result (but perhaps
: +    // a more efficient toXML(Field f, Writer w) should be used
: +    // in the future.
:      return f.stringValue();
:    }
:
: -
: +  /** :TODO: document this method */
:    public String indexedToReadable(String indexedForm) {
:      return indexedForm;
:    }
:
: +  /** :TODO: document this method */
:    public String storedToReadable(Field f) {
:      return toExternal(f);
:    }
:
: +  /** :TODO: document this method */
:    public String storedToIndexed(Field f) {
:      // right now, the transformation of single valued fields like SortableInt
:      // is done when the Field is created, not at analysis time... this means
: @@ -219,10 +246,10 @@
:    **********/
:
:
: -  //
: -  // Default analyzer for types that only produce 1 verbatim token...
: -  // A maximum size of chars to be read must be specified
: -  //
: +  /**
: +   * Default analyzer for types that only produce 1 verbatim token...
: +   * A maximum size of chars to be read must be specified
: +   */
:    protected final class DefaultAnalyzer extends SolrAnalyzer {
:      final int maxChars;
:
: @@ -244,44 +271,77 @@
:    }
:
:
: -  //analyzer set by schema for text types.
: -  //subclasses can set analyzer themselves or override getAnalyzer()
: +  /**
: +   * Analyzer set by schema for text types to use when indexing fields
: +   * of this type, subclasses can set analyzer themselves or override
: +   * getAnalyzer()
: +   * @see #getAnalyzer
: +   */
:    protected Analyzer analyzer=new DefaultAnalyzer(256);
: +
: +  /**
: +   * Analyzer set by schema for text types to use when searching fields
: +   * of this type, subclasses can set analyzer themselves or override
: +   * getAnalyzer()
: +   * @see #getQueryAnalyzer
: +   */
:    protected Analyzer queryAnalyzer=analyzer;
:
: -  // get analyzer should be fast to call... since the addition of dynamic 
fields,
: -  // this can be called all the time instead of just once at startup.
: -  // The analyzer will only be used in the following scenarios:
: -  // - during a document add for any field that has "tokenized" set 
(typically
: -  //   only Text fields)
: -  // - during query parsing
: -
: +  /**
: +   * Returns the Analyzer to be used when indexing fields of this type.
: +   * <p>
: +   * This method may be called many times, at any time.
: +   * </p>
: +   * @see #getQueryAnalyzer
: +   */
:    public Analyzer getAnalyzer() {
:      return analyzer;
:    }
:
: +  /**
: +   * Returns the Analyzer to be used when searching fields of this type.
: +   * <p>
: +   * This method may be called many times, at any time.
: +   * </p>
: +   * @see #getAnalyzer
: +   */
:    public Analyzer getQueryAnalyzer() {
:      return queryAnalyzer;
:    }
:
: -  // This is called by the schema parser if a custom analyzer is defined
: +  /**
: +   * Sets the Analyzer to be used when indexing fields of this type.
: +   * @see #getAnalyzer
: +   */
:    public void setAnalyzer(Analyzer analyzer) {
:      this.analyzer = analyzer;
:      log.finest("FieldType: " + typeName + ".setAnalyzer(" + 
analyzer.getClass().getName() + ")" );
:    }
:
: -   // This is called by the schema parser if a custom analyzer is defined
: +  /**
: +   * Sets the Analyzer to be used when querying fields of this type.
: +   * @see #getQueryAnalyzer
: +   */
:    public void setQueryAnalyzer(Analyzer analyzer) {
:      this.queryAnalyzer = analyzer;
:      log.finest("FieldType: " + typeName + ".setQueryAnalyzer(" + 
analyzer.getClass().getName() + ")" );
:    }
:
: -
: +  /**
: +   * Renders the specified field as XML
: +   */
:    public abstract void write(XMLWriter xmlWriter, String name, Field f) 
throws IOException;
:
: -
: +
: +  /**
: +   * Returns the SortField instance that should be used to sort fields
: +   * of this type.
: +   */
:    public abstract SortField getSortField(SchemaField field, boolean top);
:
: +  /**
: +   * Utility usable by subclasses when they want to get basic String sorting.
: +   */
:    protected SortField getStringSort(SchemaField field, boolean reverse) {
:      return Sorting.getStringSortField(field.name, reverse, 
field.sortMissingLast(),field.sortMissingFirst());
:    }
:
: Modified: 
incubator/solr/trunk/src/java/org/apache/solr/schema/IndexSchema.java
: URL: 
http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/schema/IndexSchema.java?rev=412029&r1=412028&r2=412029&view=diff
: ==============================================================================
: --- incubator/solr/trunk/src/java/org/apache/solr/schema/IndexSchema.java 
(original)
: +++ incubator/solr/trunk/src/java/org/apache/solr/schema/IndexSchema.java Tue 
Jun  6 00:53:40 2006
: @@ -56,11 +56,22 @@
:    private String name;
:    private float version;
:
: +  /**
: +   * Constructs a schema using the specified file name using the normal
: +   * Config path directory searching rules.
: +   *
: +   * @see Config#openResource
: +   */
:    public IndexSchema(String schemaFile) {
:      this.schemaFile=schemaFile;
:      readConfig();
:    }
:
: +  /**
: +   * Direct acess to the InputStream for the schemaFile used by this 
instance.
: +   *
: +   * @see Config#openResource
: +   */
:    public InputStream getInputStream() {
:      return Config.openResource(schemaFile);
:    }
: @@ -70,39 +81,97 @@
:      return version;
:    }
:
: +  /** The Name of this schema (as specified in the schema file) */
:    public String getName() { return name; }
:
:    private final HashMap<String, SchemaField> fields = new 
HashMap<String,SchemaField>();
:    private final HashMap<String, FieldType> fieldTypes = new 
HashMap<String,FieldType>();
:
: +  /**
: +   * Provides direct access to the Map containing all explicit
: +   * (ie: non-dynamic) fields in the index, keyed on field name.
: +   *
: +   * <p>
: +   * Modifying this Map (or any item in it) will affect the real schema
: +   * </p>
: +   */
:    public Map<String,SchemaField> getFields() { return fields; }
: +
: +  /**
: +   * Provides direct access to the Map containing all Field Types
: +   * in the index, keyed on fild type name.
: +   *
: +   * <p>
: +   * Modifying this Map (or any item in it) will affect the real schema
: +   * </p>
: +   */
:    public Map<String,FieldType> getFieldTypes() { return fieldTypes; }
:
:
:    private Similarity similarity;
: +
: +  /**
: +   * Returns the Similarity used for this index
: +   */
:    public Similarity getSimilarity() { return similarity; }
:
:    private Analyzer analyzer;
: +
: +  /**
: +   * Returns the Analyzer used when indexing documents for this index
: +   *
: +   * <p>
: +   * This Analyzer is field (and dynamic field) name aware, and delegates to
: +   * a field specific Analyzer based on the field type.
: +   * </p>
: +   */
:    public Analyzer getAnalyzer() { return analyzer; }
:
:    private Analyzer queryAnalyzer;
: +
: +  /**
: +   * Returns the Analyzer used when searching this index
: +   *
: +   * <p>
: +   * This Analyzer is field (and dynamic field) name aware, and delegates to
: +   * a field specific Analyzer based on the field type.
: +   * </p>
: +   */
:    public Analyzer getQueryAnalyzer() { return queryAnalyzer; }
:
:    private String defaultSearchFieldName=null;
: +
: +  /** Name of the default search field specified in the schema file */
:    public String getDefaultSearchFieldName() {
:      return defaultSearchFieldName;
:    }
:
:    private SchemaField uniqueKeyField;
: +
: +  /**
: +   * Unique Key field specified in the schema file
: +   * @return null if this schema has no unique key field
: +   */
:    public SchemaField getUniqueKeyField() { return uniqueKeyField; }
:
:    private String uniqueKeyFieldName;
:    private FieldType uniqueKeyFieldType;
:
: +  /**
: +   * The raw (field type encoded) value of the Unique Key field for
: +   * the specified Document
: +   * @return null if this schema has no unique key field
: +   * @see #printableUniqueKey
: +   */
:    public Field getUniqueKeyField(org.apache.lucene.document.Document doc) {
:      return doc.getField(uniqueKeyFieldName);  // this should return null if 
name is null
:    }
:
: +  /**
: +   * The printable value of the Unique Key field for
: +   * the specified Document
: +   * @return null if this schema has no unique key field
: +   */
:    public String printableUniqueKey(org.apache.lucene.document.Document doc) {
:       Field f = doc.getField(uniqueKeyFieldName);
:       return f==null ? null : uniqueKeyFieldType.toExternal(f);
: @@ -480,8 +549,14 @@
:
:    private DynamicField[] dynamicFields;
:
: -
: -  // get a field, and if not statically defined, check dynamic fields.
: +  /**
: +   * Returns the SchemaField that should be used for the specified field name
: +   *
: +   * @param fieldName may be an explicitly created field, or a name that
: +   * excercies a dynamic field.
: +   * @throws SolrException if no such field exists
: +   * @see #getFieldType
: +   */
:    public SchemaField getField(String fieldName) {
:       SchemaField f = fields.get(fieldName);
:      if (f != null) return f;
: @@ -498,8 +573,20 @@
:      throw new SolrException(1,"undefined field "+fieldName);
:    }
:
: -  // This method exists because it can be more efficient for dynamic fields
: -  // if a full SchemaField isn't needed.
: +  /**
: +   * Returns the FieldType for the specified field name.
: +   *
: +   * <p>
: +   * This method exists because it can be more efficient then
: +   * [EMAIL PROTECTED] #getField} for dynamic fields if a full SchemaField 
isn't needed.
: +   * </p>
: +   *
: +   * @param fieldName may be an explicitly created field, or a name that
: +   * excercies a dynamic field.
: +   * @throws SolrException if no such field exists
: +   * @see #getField(String)
: +   * @see #getFieldTypeNoEx
: +   */
:    public FieldType getFieldType(String fieldName) {
:      SchemaField f = fields.get(fieldName);
:      if (f != null) return f.getType();
: @@ -508,8 +595,18 @@
:    }
:
:    /**
: -   * return null instead of throwing an exception if
: -   * the field is undefined.
: +   * Returns the FieldType for the specified field name.
: +   *
: +   * <p>
: +   * This method exists because it can be more efficient then
: +   * [EMAIL PROTECTED] #getField} for dynamic fields if a full SchemaField 
isn't needed.
: +   * </p>
: +   *
: +   * @param fieldName may be an explicitly created field, or a name that
: +   * excercies a dynamic field.
: +   * @return null if field is not defined.
: +   * @see #getField(String)
: +   * @see #getFieldTypeNoEx
:     */
:    public FieldType getFieldTypeNoEx(String fieldName) {
:      SchemaField f = fields.get(fieldName);
: @@ -518,6 +615,16 @@
:    }
:
:
: +  /**
: +   * Returns the FieldType of the best matching dynamic field for
: +   * the specified field name
: +   *
: +   * @param fieldName may be an explicitly created field, or a name that
: +   * excercies a dynamic field.
: +   * @throws SolrException if no such field exists
: +   * @see #getField(String)
: +   * @see #getFieldTypeNoEx
: +   */
:    public FieldType getDynamicFieldType(String fieldName) {
:       for (DynamicField df : dynamicFields) {
:        if (df.matches(fieldName)) return df.prototype.getType();
: @@ -534,6 +641,11 @@
:
:
:    private final Map<String, SchemaField[]> copyFields = new 
HashMap<String,SchemaField[]>();
: +
: +  /**
: +   * Returns the list of fields that should recieve a copy of any indexed 
values added to the specified field.
: +   * @return may be null or empty if there are no matching copyField 
directives
: +   */
:    public SchemaField[] getCopyFields(String sourceField) {
:      return copyFields.get(sourceField);
:    }
:
: Modified: 
incubator/solr/trunk/src/java/org/apache/solr/schema/SchemaField.java
: URL: 
http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/schema/SchemaField.java?rev=412029&r1=412028&r2=412029&view=diff
: ==============================================================================
: --- incubator/solr/trunk/src/java/org/apache/solr/schema/SchemaField.java 
(original)
: +++ incubator/solr/trunk/src/java/org/apache/solr/schema/SchemaField.java Tue 
Jun  6 00:53:40 2006
: @@ -24,12 +24,11 @@
:  import java.io.IOException;
:
:  /**
: + * Encapsulates all information about a Field in a Solr Schema
: + *
:   * @author yonik
:   * @version $Id$
:   */
: -
: -
: -
:  public final class SchemaField extends FieldProperties {
:    final String name;
:    final FieldType type;
:
:



-Hoss

Reply via email to