Updated Branches:
  refs/heads/apache-blur-0.2 13b89d30d -> f806039ee

Adding a configurable analyzer class name.


Project: http://git-wip-us.apache.org/repos/asf/incubator-blur/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-blur/commit/f806039e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-blur/tree/f806039e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-blur/diff/f806039e

Branch: refs/heads/apache-blur-0.2
Commit: f806039ee7e4da82766e03c6cf150151b10882ec
Parents: 13b89d3
Author: Aaron McCurry <[email protected]>
Authored: Mon Nov 4 21:22:40 2013 -0500
Committer: Aaron McCurry <[email protected]>
Committed: Mon Nov 4 21:22:40 2013 -0500

----------------------------------------------------------------------
 .../analysis/type/TextFieldTypeDefinition.java  | 47 +++++++++++++++++++-
 docs/data-model.html                            |  2 +
 2 files changed, 47 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f806039e/blur-query/src/main/java/org/apache/blur/analysis/type/TextFieldTypeDefinition.java
----------------------------------------------------------------------
diff --git 
a/blur-query/src/main/java/org/apache/blur/analysis/type/TextFieldTypeDefinition.java
 
b/blur-query/src/main/java/org/apache/blur/analysis/type/TextFieldTypeDefinition.java
index 6b40101..a625247 100644
--- 
a/blur-query/src/main/java/org/apache/blur/analysis/type/TextFieldTypeDefinition.java
+++ 
b/blur-query/src/main/java/org/apache/blur/analysis/type/TextFieldTypeDefinition.java
@@ -19,10 +19,13 @@ package org.apache.blur.analysis.type;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.lang.reflect.Constructor;
 import java.util.Map;
 
 import org.apache.blur.analysis.FieldTypeDefinition;
 import org.apache.blur.analysis.NoStopWordStandardAnalyzer;
+import org.apache.blur.log.Log;
+import org.apache.blur.log.LogFactory;
 import org.apache.blur.lucene.LuceneVersionConstant;
 import org.apache.blur.thrift.generated.Column;
 import org.apache.hadoop.conf.Configuration;
@@ -33,9 +36,13 @@ import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.document.TextField;
+import org.apache.lucene.util.Version;
 
 public class TextFieldTypeDefinition extends FieldTypeDefinition {
 
+  private static final Log LOG = 
LogFactory.getLog(TextFieldTypeDefinition.class);
+
+  public static final String ANALYZER_CLASS = "analyzerClass";
   public static final String STOP_WORD_PATH = "stopWordPath";
   public static final String NAME = "text";
   public static final FieldType TYPE_NOT_STORED;
@@ -61,9 +68,17 @@ public class TextFieldTypeDefinition extends 
FieldTypeDefinition {
   @Override
   public void configure(String fieldNameForThisInstance, Map<String, String> 
properties, Configuration configuration) {
     String stopWordUri = properties.get(STOP_WORD_PATH);
+    String className = properties.get(ANALYZER_CLASS);
     if (stopWordUri == null) {
-      _analyzer = new NoStopWordStandardAnalyzer();
+      if (className == null) {
+        _analyzer = new NoStopWordStandardAnalyzer();
+      } else {
+        _analyzer = instance(className);
+      }
     } else {
+      if (className != null) {
+        LOG.warn("Class name [{0}] ignored do due to the [{1}] property being 
set.", className, STOP_WORD_PATH);
+      }
       try {
         Path path = new Path(stopWordUri);
         FileSystem fileSystem = path.getFileSystem(configuration);
@@ -75,6 +90,34 @@ public class TextFieldTypeDefinition extends 
FieldTypeDefinition {
       }
     }
   }
+  
+  private static Analyzer instance(String name) {
+    try {
+
+      Class<?> clazz = Class.forName(name);
+      Constructor<?>[] constructors = clazz.getConstructors();
+      for (Constructor<?> constructor : constructors) {
+        Class<?>[] parameterTypes = constructor.getParameterTypes();
+        if (parameterTypes.length == 0) {
+          return (Analyzer) constructor.newInstance(new Object[] {});
+        }
+      }
+
+      for (Constructor<?> constructor : constructors) {
+        Class<?>[] parameterTypes = constructor.getParameterTypes();
+        if (parameterTypes.length == 1) {
+          Class<?> type = parameterTypes[0];
+          if (type.equals(Version.class)) {
+            return (Analyzer) constructor.newInstance(new Object[] { 
LuceneVersionConstant.LUCENE_VERSION });
+          }
+        }
+      }
+      throw new RuntimeException("Cannot find a default constructor or a 
constructor that takes a ["
+          + Version.class.getName() + "]");
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
 
   @Override
   public Iterable<? extends Field> getFieldsForColumn(String family, Column 
column) {
@@ -114,7 +157,7 @@ public class TextFieldTypeDefinition extends 
FieldTypeDefinition {
   public boolean checkSupportForPrefixQuery() {
     return true;
   }
-  
+
   @Override
   public boolean checkSupportForRegexQuery() {
     return true;

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f806039e/docs/data-model.html
----------------------------------------------------------------------
diff --git a/docs/data-model.html b/docs/data-model.html
index fb7b3f9..4eecbe1 100644
--- a/docs/data-model.html
+++ b/docs/data-model.html
@@ -338,6 +338,8 @@ To run a query to find all the rows that contain a location 
within 10 miles of g
               <ul>
               <li>&quot;stopWordPath&quot; -Optional- default value is no stop 
words.  This should be a HDFS path.
        <br/>This will load stop words into the StandardAnalyzer for this 
field, one term per line.</li>
+       
+                 <li>&quot;analyzerClass&quot; -Optional- default value is a 
standard analyzer with no stop words.<br/>This could be any Analyzer class that 
has a default constructor or one that takes a Lucene Version enum.</li>
               </ul>
                  </p>
               <h3 id="string_type">String</h3>

Reply via email to