Converting a FacetBuilder to Json

I'm trying to write a little Unit Test to check that we setting up our
objects correctly. To do this I'm setting up a FacetBuilder and
convert it to Json that from where I can assert its correctness.

However, when I try to convert the FacetBuilder to Json I get an
Exception:

TermsFacetBuilder facetBuilder =
FacetBuilders.termsFacet("name").field("field");
String jsonString =
facetBuilder.toXContent(XContentFactory.safeJsonBuilder(),
EMPTY_PARAMS).string();

org.elasticsearch.common.jackson.JsonGenerationException: Can not
write a field name, expecting a value
at
org.elasticsearch.common.jackson.impl.JsonGeneratorBase._reportError(JsonGeneratorBase.java:
480)
at
org.elasticsearch.common.jackson.impl.Utf8Generator.writeFieldName(Utf8Generator.java:
270)
at
org.elasticsearch.common.xcontent.json.JsonXContentGenerator.writeFieldName(JsonXContentGenerator.java:
70)
at
org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.java:
253)
at
org.elasticsearch.common.xcontent.XContentBuilder.startObject(XContentBuilder.java:
139)
at
org.elasticsearch.search.facet.terms.TermsFacetBuilder.toXContent(TermsFacetBuilder.java:
211)

I tried both versions 0.17.4 and 0.17.7 with pretty consistent results
(StackTrace is for 0.17.7)

I fired up a debugger and stepped through the code and there is
nothing that is null or otherwise broken.

If you just need to print the facet, you need to wrap it with startObject()
({), and endObject(}) to make it in a formal json structure.

On Fri, Sep 30, 2011 at 9:11 AM, leonm leon.messerschmidt@gmail.com wrote:

I'm trying to write a little Unit Test to check that we setting up our
objects correctly. To do this I'm setting up a FacetBuilder and
convert it to Json that from where I can assert its correctness.

However, when I try to convert the FacetBuilder to Json I get an
Exception:

TermsFacetBuilder facetBuilder =
FacetBuilders.termsFacet("name").field("field");
String jsonString =
facetBuilder.toXContent(XContentFactory.safeJsonBuilder(),
EMPTY_PARAMS).string();

org.elasticsearch.common.jackson.JsonGenerationException: Can not
write a field name, expecting a value
at

org.elasticsearch.common.jackson.impl.JsonGeneratorBase._reportError(JsonGeneratorBase.java:
480)
at

org.elasticsearch.common.jackson.impl.Utf8Generator.writeFieldName(Utf8Generator.java:
270)
at

org.elasticsearch.common.xcontent.json.JsonXContentGenerator.writeFieldName(JsonXContentGenerator.java:
70)
at

org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.java:
253)
at

org.elasticsearch.common.xcontent.XContentBuilder.startObject(XContentBuilder.java:
139)
at

org.elasticsearch.search.facet.terms.TermsFacetBuilder.toXContent(TermsFacetBuilder.java:
211)

I tried both versions 0.17.4 and 0.17.7 with pretty consistent results
(StackTrace is for 0.17.7)

I fired up a debugger and stepped through the code and there is
nothing that is null or otherwise broken.

Thank you, that works!

One more question if you don't mind: What confused me was that a
Filter Builder happily creates json without the startObject() but a
Facet Builder doesn't. Is there something that I can use to predict
when it is required?

On Oct 2, 6:52 pm, Shay Banon kim...@gmail.com wrote:

If you just need to print the facet, you need to wrap it with startObject()
({), and endObject(}) to make it in a formal json structure.

On Fri, Sep 30, 2011 at 9:11 AM, leonm leon.messerschm...@gmail.com wrote:

I'm trying to write a little Unit Test to check that we setting up our
objects correctly. To do this I'm setting up a FacetBuilder and
convert it to Json that from where I can assert its correctness.

However, when I try to convert the FacetBuilder to Json I get an
Exception:

TermsFacetBuilder facetBuilder =
FacetBuilders.termsFacet("name").field("field");
String jsonString =
facetBuilder.toXContent(XContentFactory.safeJsonBuilder(),
EMPTY_PARAMS).string();

org.elasticsearch.common.jackson.JsonGenerationException: Can not
write a field name, expecting a value
at

org.elasticsearch.common.jackson.impl.JsonGeneratorBase._reportError(JsonGe neratorBase.java:
480)
at

org.elasticsearch.common.jackson.impl.Utf8Generator.writeFieldName(Utf8Gene rator.java:
270)
at

org.elasticsearch.common.xcontent.json.JsonXContentGenerator.writeFieldName (JsonXContentGenerator.java:
70)
at

org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.jav a:
253)
at

org.elasticsearch.common.xcontent.XContentBuilder.startObject(XContentBuild er.java:
139)
at

org.elasticsearch.search.facet.terms.TermsFacetBuilder.toXContent(TermsFace tBuilder.java:
211)

I tried both versions 0.17.4 and 0.17.7 with pretty consistent results
(StackTrace is for 0.17.7)

I fired up a debugger and stepped through the code and there is
nothing that is null or otherwise broken.

Its because of the expected stage at which those different elements (query,
filter, facet) are used within the search request. Sometimes, they need to
be in the form of { ... } (like filters), and sometimes, they need to be
outputted like "name" : { ... } (in case of facets), to be pluggable into
the the full search request.

On Mon, Oct 3, 2011 at 1:19 AM, leonm leon.messerschmidt@gmail.com wrote:

Thank you, that works!

One more question if you don't mind: What confused me was that a
Filter Builder happily creates json without the startObject() but a
Facet Builder doesn't. Is there something that I can use to predict
when it is required?

On Oct 2, 6:52 pm, Shay Banon kim...@gmail.com wrote:

If you just need to print the facet, you need to wrap it with
startObject()
({), and endObject(}) to make it in a formal json structure.

On Fri, Sep 30, 2011 at 9:11 AM, leonm leon.messerschm...@gmail.com
wrote:

I'm trying to write a little Unit Test to check that we setting up our
objects correctly. To do this I'm setting up a FacetBuilder and
convert it to Json that from where I can assert its correctness.

However, when I try to convert the FacetBuilder to Json I get an
Exception:

TermsFacetBuilder facetBuilder =
FacetBuilders.termsFacet("name").field("field");
String jsonString =
facetBuilder.toXContent(XContentFactory.safeJsonBuilder(),
EMPTY_PARAMS).string();

org.elasticsearch.common.jackson.JsonGenerationException: Can not
write a field name, expecting a value
at

org.elasticsearch.common.jackson.impl.JsonGeneratorBase._reportError(JsonGe
neratorBase.java:

  1. at

org.elasticsearch.common.jackson.impl.Utf8Generator.writeFieldName(Utf8Gene
rator.java:

  1. at

org.elasticsearch.common.xcontent.json.JsonXContentGenerator.writeFieldName
(JsonXContentGenerator.java:

  1. at

org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.jav
a:

  1. at

org.elasticsearch.common.xcontent.XContentBuilder.startObject(XContentBuild
er.java:

  1. at

org.elasticsearch.search.facet.terms.TermsFacetBuilder.toXContent(TermsFace
tBuilder.java:

I tried both versions 0.17.4 and 0.17.7 with pretty consistent results
(StackTrace is for 0.17.7)

I fired up a debugger and stepped through the code and there is
nothing that is null or otherwise broken.