From 47c11aa5382601586e00ab7fdfb612f34fb01b95 Mon Sep 17 00:00:00 2001 From: kimchy Date: Fri, 12 Mar 2010 16:53:11 +0200 Subject: [PATCH] Boolean field type does not handle number/string properly when searching, closes #59. --- .../mapper/json/JsonBooleanFieldMapper.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/json/JsonBooleanFieldMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/json/JsonBooleanFieldMapper.java index 9632045c1e0..b7e25ce15f9 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/json/JsonBooleanFieldMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/json/JsonBooleanFieldMapper.java @@ -22,12 +22,13 @@ package org.elasticsearch.index.mapper.json; import org.apache.lucene.document.Field; import org.apache.lucene.document.Fieldable; import org.codehaus.jackson.JsonToken; +import org.elasticsearch.util.Booleans; import org.elasticsearch.util.lucene.Lucene; import java.io.IOException; /** - * @author kimchy (Shay Banon) + * @author kimchy (shay.banon) */ // TODO this can be made better, maybe storing a byte for it? public class JsonBooleanFieldMapper extends JsonFieldMapper { @@ -93,7 +94,7 @@ public class JsonBooleanFieldMapper extends JsonFieldMapper { } @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) { @@ -104,7 +105,10 @@ public class JsonBooleanFieldMapper extends JsonFieldMapper { if (value == null || value.length() == 0) { return "F"; } - return value.equals("true") ? "T" : "F"; + if (Booleans.parseBoolean(value, false)) { + return "T"; + } + return "F"; } @Override public String indexedValue(Boolean value) { @@ -132,10 +136,10 @@ public class JsonBooleanFieldMapper extends JsonFieldMapper { value = "T"; } } else if (token == JsonToken.VALUE_STRING) { - if (jsonContext.jp().getText().equals("false")) { - value = "F"; - } else { + if (Booleans.parseBoolean(jsonContext.jp().getText(), false)) { value = "T"; + } else { + value = "F"; } } else { return null;