如何在GAE Search API中动态创建文档?

时间:2016-09-19 22:00:23

标签: java google-app-engine

我想了解如何动态添加文档中的字段。

我关注the doc。但是,我想在“for”语句中使用addField方法,从而以编程方式生成字段。

我试过这个:

Builder document = Document.newBuilder();
document.setId(id);

// for statement start
com.google.appengine.api.search.Field.Builder field = Field.newBuilder().setName(key).setAtom(value);
document.addField(field);
// for statement end

document.build();

但它似乎不起作用。当我正在尝试时,我打印出来

com.google.appengine.api.search.Document$Builder@2604ed54

而当我使用原始代码时:

String myDocId = "PA6-5000";
Document doc = Document.newBuilder()
    // Setting the document identifer is optional.
    // If omitted, the search service will create an identifier.
    .setId(myDocId)
    .addField(Field.newBuilder().setName("content").setText("the rain in spain"))
    .addField(Field.newBuilder().setName("email").setText(userEmail))
    .addField(Field.newBuilder().setName("domain").setAtom(userDomain))
    .addField(Field.newBuilder().setName("published").setDate(new Date()))
    .build();

我使用上面的代码得到了预期的结果。

我如何操纵这个以便将addfield()放入for语句?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

文档暗示Document.Builder是可变的,但通常你应该在每次调用后重新分配构建器,以防它不是。

Builder document = Document.newBuilder();
document.setId(id);
com.google.appengine.api.search.Field.Builder field = Field.newBuilder().setName(key).setAtom(value);
document = document.addField(field);
document.build();

在您的情况下,您看到的是构建器上的toString()方法,而不是文档本身。问题是最后一行。

试试这个:

Builder builder = Document.newBuilder();
builder.setId(id);
com.google.appengine.api.search.Field.Builder field = Field.newBuilder().setName(key).setAtom(value);
builder = builder.addField(field);
Document document = builder.build();

然后你就可以放弃你的for循环而离开你。