2016-09-19 38 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

謝謝。這工作正常。即使閱讀文檔也很難理解。但現在,沒關係,我可以按照您的提示動態地成功創建我的文檔。你解決了我的問題。謝謝。 –