Fixed BLUR-335
Project: http://git-wip-us.apache.org/repos/asf/incubator-blur/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-blur/commit/3280f726 Tree: http://git-wip-us.apache.org/repos/asf/incubator-blur/tree/3280f726 Diff: http://git-wip-us.apache.org/repos/asf/incubator-blur/diff/3280f726 Branch: refs/heads/apache-blur-0.2 Commit: 3280f726808d19bccd7c7ba16ff28d1327ab9bcd Parents: 803765a Author: Aaron McCurry <[email protected]> Authored: Tue Jan 28 13:57:26 2014 -0500 Committer: Aaron McCurry <[email protected]> Committed: Tue Jan 28 13:57:26 2014 -0500 ---------------------------------------------------------------------- .../apache/blur/analysis/BaseFieldManager.java | 65 ++++++++++++-------- .../blur/lucene/search/BlurQueryParser.java | 11 +++- .../org/apache/blur/utils/BlurConstants.java | 1 + 3 files changed, 51 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/3280f726/blur-query/src/main/java/org/apache/blur/analysis/BaseFieldManager.java ---------------------------------------------------------------------- diff --git a/blur-query/src/main/java/org/apache/blur/analysis/BaseFieldManager.java b/blur-query/src/main/java/org/apache/blur/analysis/BaseFieldManager.java index 208194e..73b6798 100644 --- a/blur-query/src/main/java/org/apache/blur/analysis/BaseFieldManager.java +++ b/blur-query/src/main/java/org/apache/blur/analysis/BaseFieldManager.java @@ -52,7 +52,9 @@ import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.AnalyzerWrapper; import org.apache.lucene.analysis.core.KeywordAnalyzer; import org.apache.lucene.document.Field; +import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.FieldType; +import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.search.Query; @@ -186,7 +188,7 @@ public abstract class BaseFieldManager extends FieldManager { List<String> fieldNamesToLoad = getFieldNamesToLoad(); for (String fieldName : fieldNamesToLoad) { if (!_fieldNameToDefMap.containsKey(fieldName)) { - tryToLoad(fieldName); + tryToLoad(fieldName); } } } @@ -211,11 +213,12 @@ public abstract class BaseFieldManager extends FieldManager { public List<Field> getFields(String rowId, Record record) throws IOException { List<Field> fields = new ArrayList<Field>(); String family = record.getFamily(); - if(family == null || family.isEmpty()){ - family = BlurConstants.DEFAULT_FAMILY; + if (family == null || family.isEmpty()) { + family = BlurConstants.DEFAULT_FAMILY; } List<Column> columns = record.getColumns(); addDefaultFields(fields, rowId, record); + addFieldExistance(fields, record); for (Column column : columns) { String name = column.getName(); String value = column.getValue(); @@ -244,6 +247,21 @@ public abstract class BaseFieldManager extends FieldManager { return fields; } + private void addFieldExistance(List<Field> fields, Record record) { + String family = record.getFamily(); + if (family == null) { + family = BlurConstants.DEFAULT_FAMILY; + } + for (Column column : record.getColumns()) { + String name = column.getName(); + String value = column.getValue(); + if (value == null || name == null) { + continue; + } + fields.add(new StringField(BlurConstants.FIELDS, family + "." + name, Store.NO)); + } + } + private void getAndAddFields(List<Field> fields, String family, Column column, String subName, FieldTypeDefinition fieldTypeDefinition) { for (Field field : fieldTypeDefinition.getFieldsForSubColumn(family, column, subName)) { @@ -257,11 +275,11 @@ public abstract class BaseFieldManager extends FieldManager { validateNotNull(rowId, BlurConstants.ROW_ID); validateNotNull(recordId, BlurConstants.RECORD_ID); - - if (family == null){ - fields.add(new Field(BlurConstants.FAMILY, BlurConstants.DEFAULT_FAMILY, ID_TYPE)); - }else{ - fields.add(new Field(BlurConstants.FAMILY, family, ID_TYPE)); + + if (family == null) { + fields.add(new Field(BlurConstants.FAMILY, BlurConstants.DEFAULT_FAMILY, ID_TYPE)); + } else { + fields.add(new Field(BlurConstants.FAMILY, family, ID_TYPE)); } fields.add(new Field(BlurConstants.ROW_ID, rowId, ID_TYPE)); fields.add(new Field(BlurConstants.RECORD_ID, recordId, ID_TYPE)); @@ -314,9 +332,9 @@ public abstract class BaseFieldManager extends FieldManager { @Override public boolean addColumnDefinition(String family, String columnName, String subColumnName, boolean fieldLessIndexed, String fieldType, Map<String, String> props) throws IOException { - if(family == null){ - family = BlurConstants.DEFAULT_FAMILY; - } + if (family == null) { + family = BlurConstants.DEFAULT_FAMILY; + } String baseFieldName = family + "." + columnName; String fieldName; if (subColumnName != null) { @@ -557,7 +575,7 @@ public abstract class BaseFieldManager extends FieldManager { } return fieldTypeDefinition.checkSupportForWildcardQuery(); } - + @Override public Boolean checkSupportForRegexQuery(String field) throws IOException { FieldTypeDefinition fieldTypeDefinition = getFieldTypeDefinition(field); @@ -567,7 +585,6 @@ public abstract class BaseFieldManager extends FieldManager { return fieldTypeDefinition.checkSupportForRegexQuery(); } - @Override public Boolean checkSupportForCustomQuery(String field) throws IOException { FieldTypeDefinition fieldTypeDefinition = getFieldTypeDefinition(field); @@ -644,17 +661,17 @@ public abstract class BaseFieldManager extends FieldManager { public boolean isStrict() { return _strict; } - + @Override - public String resolveField(String field){ - if (_fieldNameToDefMap.get(field) != null || isBuiltInField(field) || field.equals(_fieldLessField)){ - return field; - } - - String newField = BlurConstants.DEFAULT_FAMILY + "." + field; - if (_fieldNameToDefMap.get(newField) != null){ - return newField; - } - return field; + public String resolveField(String field) { + if (_fieldNameToDefMap.get(field) != null || isBuiltInField(field) || field.equals(_fieldLessField)) { + return field; + } + + String newField = BlurConstants.DEFAULT_FAMILY + "." + field; + if (_fieldNameToDefMap.get(newField) != null) { + return newField; + } + return field; } } http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/3280f726/blur-query/src/main/java/org/apache/blur/lucene/search/BlurQueryParser.java ---------------------------------------------------------------------- diff --git a/blur-query/src/main/java/org/apache/blur/lucene/search/BlurQueryParser.java b/blur-query/src/main/java/org/apache/blur/lucene/search/BlurQueryParser.java index 43601a2..587bb2f 100644 --- a/blur-query/src/main/java/org/apache/blur/lucene/search/BlurQueryParser.java +++ b/blur-query/src/main/java/org/apache/blur/lucene/search/BlurQueryParser.java @@ -22,12 +22,14 @@ import java.util.Map; import java.util.UUID; import org.apache.blur.analysis.FieldManager; +import org.apache.blur.utils.BlurConstants; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.MultiPhraseQuery; import org.apache.lucene.search.PhraseQuery; import org.apache.lucene.search.Query; +import org.apache.lucene.search.TermQuery; import org.apache.lucene.util.Version; public class BlurQueryParser extends QueryParser { @@ -163,8 +165,13 @@ public class BlurQueryParser extends QueryParser { @Override protected Query newWildcardQuery(Term t) { - if (SUPER.equals(t.field()) && "*".equals(t.text())) { - return new MatchAllDocsQuery(); + if ("*".equals(t.text())) { + String fieldName = t.field(); + if (SUPER.equals(fieldName)) { + return new MatchAllDocsQuery(); + } else { + return new TermQuery(new Term(BlurConstants.FIELDS, fieldName)); + } } String resolvedField = _fieldManager.resolveField(t.field()); try { http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/3280f726/blur-util/src/main/java/org/apache/blur/utils/BlurConstants.java ---------------------------------------------------------------------- diff --git a/blur-util/src/main/java/org/apache/blur/utils/BlurConstants.java b/blur-util/src/main/java/org/apache/blur/utils/BlurConstants.java index cca9885..7e20fe1 100644 --- a/blur-util/src/main/java/org/apache/blur/utils/BlurConstants.java +++ b/blur-util/src/main/java/org/apache/blur/utils/BlurConstants.java @@ -31,6 +31,7 @@ public class BlurConstants { public static final String PRIME_DOC_VALUE = "true"; public static final String ROW_ID = "rowid"; public static final String RECORD_ID = "recordid"; + public static final String FIELDS = "_fields_"; public static final String FAMILY = "family"; public static final String DEFAULT_FAMILY = "_default_"; public static final String SUPER = "super";
