2011-11-16 57 views
15

我是elasticsearch的新手,並且正在尋找一些使用Java API的幫助。我有一些域對象 E.g.elasticsearch將對象插入索引

@XmlRootElement 

public class BasicActivity { 

private String activityName; 
private FullActivity activity; 
// Getters and setters 
} 

我創建連接到節點

Client client = new TransportClient() 
     .addTransportAddress(new InetSocketTransportAddress("192.168.0.198",9300)); 

運輸客戶有沒有簡便的方法來插入我的對象直接進入elasticsearch?

我已經看到了這

IndexResponse response = client.prepareIndex("twitter", "tweet", "1") 
        .setSource(jsonBuilder() 
           .startObject() 
            .field("user", "kimchy") 
            .field("postDate", new Date()) 
            .field("message", "trying out Elastic  Search") 
           .endObject() 
          ) 
        .execute() 
        .actionGet(); 

但要做到這一點,我將不得不每一個對象轉換爲JSON,這雖然有可能不是我理想的情況下轉換。

如果我對它是如何工作的誤解(建築),請讓我知道,我在這裏學習!

歡呼聲, 羅布

回答

26

我認爲你是在正確的軌道上。有時你不習慣使用Java API。我想隨着時間的推移它會變得更好。

您必須將對象轉換爲Json才能將它們發送到您的ElasticSearch集羣。 Gson是許多流行的圖書館之一,可以爲你做到這一點。

上面顯示的代碼將創建一個索引。現在,將文檔添加到該索引,運行這樣的東西。

Tweet tweet = new Tweet(); 
    tweet.setId("1234"); 
    tweet.setMessage("message"); 

    IndexRequest indexRequest = new IndexRequest("twitter","tweet", tweet.getId()); 
    indexRequest.source(new Gson().toJson(tweet)); 
    IndexResponse response = client.index(indexRequest).actionGet(); 

退房BulkRequest在一次索引幾個項目。一旦你的對象變得更復雜,你需要創建Mappings

我在Guide中發現了很好的例子,但通常在ES Google Group中有更詳細的例子。

我也必須推薦Head前端。它顯示你現有的指數和項目。

+0

現貨上,非常感謝你真的有幫助 – Rob

+6

傑克遜是另一個Json庫,它在性能方面似乎與Gson相比毫不遜色。 http://jackson.codehaus.org/Tutorial – Andy