better failure message when failing to load _uid field

This commit is contained in:
Shay Banon 2012-06-26 02:40:33 +02:00
parent 12a644c89b
commit eb954a6157
7 changed files with 33 additions and 12 deletions

View File

@ -24,8 +24,6 @@ import org.elasticsearch.common.lucene.document.ResetFieldSelector;
/** /**
* An optimized field selector that loads just the uid. * An optimized field selector that loads just the uid.
*
*
*/ */
public class SourceFieldSelector implements ResetFieldSelector { public class SourceFieldSelector implements ResetFieldSelector {
@ -46,4 +44,9 @@ public class SourceFieldSelector implements ResetFieldSelector {
@Override @Override
public void reset() { public void reset() {
} }
@Override
public String toString() {
return "source";
}
} }

View File

@ -25,8 +25,6 @@ import org.elasticsearch.index.mapper.internal.SourceFieldMapper;
/** /**
* A field selector that loads all fields except the source field. * A field selector that loads all fields except the source field.
*
*
*/ */
public class AllButSourceFieldSelector implements ResetFieldSelector { public class AllButSourceFieldSelector implements ResetFieldSelector {
@ -43,4 +41,9 @@ public class AllButSourceFieldSelector implements ResetFieldSelector {
@Override @Override
public void reset() { public void reset() {
} }
@Override
public String toString() {
return "all_but_source";
}
} }

View File

@ -54,4 +54,9 @@ public class FieldMappersFieldSelector implements ResetFieldSelector {
@Override @Override
public void reset() { public void reset() {
} }
@Override
public String toString() {
return "fields(" + names + ")";
}
} }

View File

@ -52,4 +52,9 @@ public class UidAndRoutingFieldSelector implements ResetFieldSelector {
public void reset() { public void reset() {
match = 0; match = 0;
} }
@Override
public String toString() {
return "uid_and_routing";
}
} }

View File

@ -26,8 +26,6 @@ import org.elasticsearch.index.mapper.internal.UidFieldMapper;
/** /**
* An optimized field selector that loads just the uid and the source. * An optimized field selector that loads just the uid and the source.
*
*
*/ */
public class UidAndSourceFieldSelector implements ResetFieldSelector { public class UidAndSourceFieldSelector implements ResetFieldSelector {
@ -54,4 +52,9 @@ public class UidAndSourceFieldSelector implements ResetFieldSelector {
public void reset() { public void reset() {
match = 0; match = 0;
} }
@Override
public String toString() {
return "uid_and_source";
}
} }

View File

@ -25,8 +25,6 @@ import org.elasticsearch.index.mapper.internal.UidFieldMapper;
/** /**
* An optimized field selector that loads just the uid. * An optimized field selector that loads just the uid.
*
*
*/ */
public class UidFieldSelector implements ResetFieldSelector { public class UidFieldSelector implements ResetFieldSelector {
@ -47,4 +45,9 @@ public class UidFieldSelector implements ResetFieldSelector {
@Override @Override
public void reset() { public void reset() {
} }
@Override
public String toString() {
return "uid";
}
} }

View File

@ -156,7 +156,7 @@ public class FetchPhase implements SearchPhase {
for (int index = 0; index < context.docIdsToLoadSize(); index++) { for (int index = 0; index < context.docIdsToLoadSize(); index++) {
int docId = context.docIdsToLoad()[context.docIdsToLoadFrom() + index]; int docId = context.docIdsToLoad()[context.docIdsToLoadFrom() + index];
Document doc = loadDocument(context, fieldSelector, docId); Document doc = loadDocument(context, fieldSelector, docId);
Uid uid = extractUid(context, doc); Uid uid = extractUid(context, doc, fieldSelector);
DocumentMapper documentMapper = context.mapperService().documentMapper(uid.type()); DocumentMapper documentMapper = context.mapperService().documentMapper(uid.type());
@ -268,8 +268,7 @@ public class FetchPhase implements SearchPhase {
return null; return null;
} }
private Uid extractUid(SearchContext context, Document doc) { private Uid extractUid(SearchContext context, Document doc, @Nullable ResetFieldSelector fieldSelector) {
// TODO we might want to use FieldData here to speed things up, so we don't have to load it at all...
String sUid = doc.get(UidFieldMapper.NAME); String sUid = doc.get(UidFieldMapper.NAME);
if (sUid != null) { if (sUid != null) {
return Uid.createUid(sUid); return Uid.createUid(sUid);
@ -279,7 +278,7 @@ public class FetchPhase implements SearchPhase {
for (Fieldable field : doc.getFields()) { for (Fieldable field : doc.getFields()) {
fieldNames.add(field.name()); fieldNames.add(field.name());
} }
throw new FetchPhaseExecutionException(context, "Failed to load uid from the index, missing internal _uid field, current fields in the doc [" + fieldNames + "]"); throw new FetchPhaseExecutionException(context, "Failed to load uid from the index, missing internal _uid field, current fields in the doc [" + fieldNames + "], selector [" + fieldSelector + "]");
} }
private Document loadDocument(SearchContext context, @Nullable ResetFieldSelector fieldSelector, int docId) { private Document loadDocument(SearchContext context, @Nullable ResetFieldSelector fieldSelector, int docId) {