Boolean field type does not handle number/string properly when searching, closes #59.

This commit is contained in:
kimchy 2010-03-12 16:53:11 +02:00
parent 6fe329ab69
commit 47c11aa538

View File

@ -22,12 +22,13 @@ package org.elasticsearch.index.mapper.json;
import org.apache.lucene.document.Field; import org.apache.lucene.document.Field;
import org.apache.lucene.document.Fieldable; import org.apache.lucene.document.Fieldable;
import org.codehaus.jackson.JsonToken; import org.codehaus.jackson.JsonToken;
import org.elasticsearch.util.Booleans;
import org.elasticsearch.util.lucene.Lucene; import org.elasticsearch.util.lucene.Lucene;
import java.io.IOException; import java.io.IOException;
/** /**
* @author kimchy (Shay Banon) * @author kimchy (shay.banon)
*/ */
// TODO this can be made better, maybe storing a byte for it? // TODO this can be made better, maybe storing a byte for it?
public class JsonBooleanFieldMapper extends JsonFieldMapper<Boolean> { public class JsonBooleanFieldMapper extends JsonFieldMapper<Boolean> {
@ -93,7 +94,7 @@ public class JsonBooleanFieldMapper extends JsonFieldMapper<Boolean> {
} }
@Override public Boolean value(Fieldable field) { @Override public Boolean value(Fieldable field) {
return Boolean.parseBoolean(valueAsString(field)); return field.stringValue().charAt(0) == 'T' ? Boolean.TRUE : Boolean.FALSE;
} }
@Override public String valueAsString(Fieldable field) { @Override public String valueAsString(Fieldable field) {
@ -104,7 +105,10 @@ public class JsonBooleanFieldMapper extends JsonFieldMapper<Boolean> {
if (value == null || value.length() == 0) { if (value == null || value.length() == 0) {
return "F"; return "F";
} }
return value.equals("true") ? "T" : "F"; if (Booleans.parseBoolean(value, false)) {
return "T";
}
return "F";
} }
@Override public String indexedValue(Boolean value) { @Override public String indexedValue(Boolean value) {
@ -132,10 +136,10 @@ public class JsonBooleanFieldMapper extends JsonFieldMapper<Boolean> {
value = "T"; value = "T";
} }
} else if (token == JsonToken.VALUE_STRING) { } else if (token == JsonToken.VALUE_STRING) {
if (jsonContext.jp().getText().equals("false")) { if (Booleans.parseBoolean(jsonContext.jp().getText(), false)) {
value = "F";
} else {
value = "T"; value = "T";
} else {
value = "F";
} }
} else { } else {
return null; return null;