You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ho...@apache.org on 2006/06/06 09:53:41 UTC
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->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
+ * {@link #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
+ * {@link #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;
Re: 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.ja
Posted by Chris Hostetter <ho...@fucit.org>.
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: hossman@apache.org
: 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->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
: + * {@link #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
: + * {@link #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