2016-09-19 36 views
0

我想了解如何在我的文档中动态添加字段。我是the doc。不过,我想在“for”语句中使用addField方法,从而以编程方式生成字段。如何在GAE Search API中动态创建文档?

我已经试过这样:

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();

但它似乎并不工作。当我想我得到这个打印出来

[email protected] 

而当我使用的原代码:

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()放到语句中?

感谢您的帮助。

回答

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循环和远离你去。

+0

谢谢。这工作正常。即使阅读文档也很难理解。但现在,没关系,我可以按照您的提示动态地成功创建我的文档。你解决了我的问题。谢谢。 –