2011-11-16 38 views
15

Tôi mới dùng elasticsearch và đang tìm kiếm một chút trợ giúp bằng cách sử dụng API Java. Tôi có một số đối tượng miền Ví dụ:elasticsearch chèn các đối tượng vào chỉ mục

@XmlRootElement 

public class BasicActivity { 

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

Tôi đã tạo ra một khách hàng vận chuyển kết nối với một nút

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

Có và cách dễ dàng để chèn đối tượng của tôi thẳng vào elasticsearch?

Tôi đã thấy điều này

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

Tuy nhiên, để làm được điều đó tôi sẽ phải chuyển đổi tất cả các đối tượng vào json, mà còn có thể không phải là tình hình lý tưởng của tôi.

Nếu tôi hiểu sai về cách hoạt động (kiến trúc) thì vui lòng cho tôi biết, tôi ở đây để tìm hiểu!

cổ vũ, Rob

Trả lời

26

Tôi nghĩ bạn đang đi đúng hướng. Java API có thể khó nhận được vào những lúc bạn không quen với nó. Tôi nghĩ theo thời gian nó sẽ trở nên tốt hơn.

Bạn phải chuyển đổi các đối tượng của mình thành Json để gửi chúng đến cụm ElasticSearch của bạn. Gson là một trong nhiều thư viện phổ biến có thể làm điều đó cho bạn.

Mã bạn hiển thị ở trên sẽ tạo chỉ mục. Bây giờ để thêm một tài liệu vào chỉ mục đó, hãy chạy một cái gì đó như thế này.

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

Kiểm tra BulkRequest để lập chỉ mục một số mục cùng một lúc. Khi đối tượng của bạn trở nên phức tạp hơn, bạn cần phải tạo Mappings.

Tôi đã tìm thấy các ví dụ tuyệt vời trong số Guide, nhưng thường là các ví dụ chi tiết hơn trong ES Google Group.

Tôi cũng phải giới thiệu giao diện người dùng Head. Nó cho bạn thấy các chỉ mục và các mục hiện có.

+0

Phát hiện, cảm ơn bạn rất nhiều điều đó thực sự hữu ích – Rob

+6

Jackson là một thư viện Json khác, có vẻ như so sánh thuận lợi với Gson về hiệu suất. http://jackson.codehaus.org/Tutorial – Andy

Các vấn đề liên quan