2013-11-07 3 views
2
  1. Скачано .90.6, Распакованный, переехал Elastic поиск в/USR/доли/elasticsearch (с CHMOD 777 -R разрешения на centosx64 6.4), переименованные кластер somethingstupid и начал сервер.Elasticsearch Java Index API Document

  2. Установленные плагины ESHead и ESBrowser b/c Im new и нуждаются в этом (я использую Solr's nice ui). Таким образом, я знаю, что сервер работает тоже.

  3. Я могу создать индекс с помощью ротора: curl -XPOST 'http://localhost:9200/testindex' и удалить его тоже: curl -XDELETE 'http://localhost:9200/testindex'

Когда я пытаюсь создать новый индекс и индексировать документ типа статьи и просмотра его с помощью Java API, Eclipse прогонов код, показывает базовое ведение журнала в консоли, а затем закрывается без ошибок. Кроме того, в моих журналах последняя строка просто показывает, что я начал искать эластичный поиск, но больше ничего. Его как код даже не достигает упругого поиска. Никаких индексов или статей не появляется после запуска java api. Что мне не хватает?

import java.util.Date; 
import java.util.HashMap; 
import java.util.Map; 

import org.elasticsearch.client.Client; 
import org.elasticsearch.node.Node; 

import static org.elasticsearch.node.NodeBuilder.*; 

public class PostES { 

    public static void main (String args[]){ 
     PostES p = new PostES(); 
     p.postElasticSearch(); 
    } 


    public static Map<String, Object> putJsonDocument(String title, String content, Date postDate, String author){ 

      Map<String, Object> jsonDocument = new HashMap<String, Object>(); 

      jsonDocument.put("title", title); 
      jsonDocument.put("conten", content); 
      jsonDocument.put("postDate", postDate); 
      jsonDocument.put("author", author); 

      return jsonDocument; 
    } 


    private void postElasticSearch(){ 

      Node node = nodeBuilder().node(); 
      Client client = node.client(); 

      client.prepareIndex("testindex", "article") 
         .setSource(putJsonDocument("Example Title", 
               "This description is so important. You don't even know!", 
               new Date(), 
               "J.R.")) 
               .execute().actionGet(); 

      node.close(); 
     } 


} 

Мой источник: http://java.dzone.com/articles/elasticsearch-java-api. Все остальное, включая эластичную документацию, не получилось так или иначе ... (Метод jsonBuilder() не определен для типа PostES).

Согласно документации, я должен быть в состоянии сделать это. Но это ничего не делает либо:

import static org.elasticsearch.node.NodeBuilder.nodeBuilder; 

import org.elasticsearch.action.index.IndexResponse; 
import org.elasticsearch.client.Client; 
import org.elasticsearch.node.Node; 


public class TestPostMethod2 { 

    public static void main(String[] args) { 
     Node node = nodeBuilder().local(true).node(); 
     Client client = node.client(); 

      String json = 
        "{\"user\":\"kimchy\"," + 
        "\"postDate\":\"2013-01-30\"," + 
        "\"message\":\"trying out Elastic Search\"}";    

      IndexResponse response = client.prepareIndex("testindex", "article") 
        .setSource(json) 
        .execute() 
        .actionGet(); 
    } 

} 

ответ

1

Необходимо указать имя кластера при создании узла и указать его client node или использовать transport client.

В обоих случаях вы начинаете новый узел, который создает новый кластер с именем по умолчанию, в то время как вы хотите, чтобы клиентский узел присоединился к существующему кластеру.

Node node = nodeBuilder().clusterName("somethingstupid").client(true).node(); 
+1

Проклятье ... @javanna STRIKES AGAIN !!! [Большое спасибо] – Chris

0

не уверены, если это связанно, но когда первоначально я пытался подключиться к управлению ES кластера из затмения я должен был добавить это к аргументам моего кота:

-Delasticsearch -Des.path.home=/usr/local/opt/elasticsearch 

где elasticsearch это имя, которое вы определили в elasticsearch.yml и, конечно, на пути, где вы установили ES

+1

Tomcat? Я должен придерживаться эластичного поиска внутри контейнера? Я в замешательстве. ПОЧЕМУ ЛЮДИ ГОВОРЯТ, ЧТО ЭТО ТАК ЛЕГКО НАЧАТЬ НАЧАТЬ? Я должен быть настоящим идиотом ... – Chris

+0

Бах, неважно, мое плохое. 'Node node = nodeBuilder(). ClusterName (" somethingstupid "). Node(); Клиент client = node.client(); вам нужно указать имя вашего кластера при подключении, если оно отличается от –

0

1 способ я могу получить API для работы является не его использованием:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 


public class PostHttpClient { 

    public static void main(String[] args) { 
     try{ 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost postRequest = new HttpPost(
      "http://localhost:9200/testindex/article"); 

     StringEntity input = new StringEntity("{\"name\":\"ES JAVA API WorkAround\",\"category\":\"Garbage\"}"); 
     input.setContentType("application/json"); 
     postRequest.setEntity(input); 

     HttpResponse response = httpClient.execute(postRequest); 

     if (response.getStatusLine().getStatusCode() != 201) { 
      throw new RuntimeException("Failed : HTTP error code : " 
       + response.getStatusLine().getStatusCode()); 
     } 

     BufferedReader br = new BufferedReader(
         new InputStreamReader((response.getEntity().getContent()))); 

     String output; 
     System.out.println("Output from Server .... \n"); 
     while ((output = br.readLine()) != null) { 
      System.out.println(output); 
     } 

     httpClient.getConnectionManager().shutdown(); 

     } catch (Exception e) { 

     e.printStackTrace(); 

     } 

    } 

} 
0

Почему бы не использовать Транспортного клиента с java.util.Map?

import org.elasticsearch.action.index.IndexResponse; 
import org.elasticsearch.client.Client; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.transport.InetSocketTransportAddress; 

import java.util.*; 

public class Test { 

    public static Client getTransportClient(String host, int port) { 

     return new TransportClient() 
       .addTransportAddress(new InetSocketTransportAddress(host, port)); 
    } 

    public static IndexResponse doIndex(Client client, String index, String type, String id, Map<String, Object> data) { 

     return client.prepareIndex(index, type, id) 
       .setSource(data) 
       .execute() 
       .actionGet(); 
    } 

    public static void main(String[] args) { 

     Client client = getTransportClient("localhost", 9300); 

     String index = "twitter"; 
     String type = "tweet"; 
     String id  = null;  // set id here if you want to 

     Map<String, Object> data = new HashMap<String, Object>(); 
     data.put("text", "Posted from Java @ " + System.currentTimeMillis()); 
     data.put("user", "Igal"); 
     data.put("date", new Date()); 

     IndexResponse result = doIndex(client, index, type, id, data); 

     System.out.println((result.isCreated() ? "created" : "updated") + " document " + result.getId()); 

     client.close(); 
    } 
} 
Смежные вопросы