2017-02-15 3 views
0

Hallo Elasticsearchfriends.Elasticsearch Java Api Set Indexeinstellungen

Ich kämpfe über die Suche nach Typ Analyzer. Ich habe eine NodeFactory und dort erstelle ich einen Knoten. Dann indexiere ich in meiner IndexService-Klasse eine ganze JSON-Datei mit einigen Daten. Ich bin kein Elasticsearch-Profi und möchte deshalb wissen, wie ich meinem Index Einstellungen hinzufügen kann oder ob ich die Einstellungen dem Knoten hinzufügen muss.

NodeFactory.java

@Component("es") 
public class ElasticSearchNodeFactory implements FactoryBean<Node> { 
private Node node; 

public ElasticSearchNodeFactory() { 
    System.out.println("hallo"); 
} 

@Override 
public Node getObject() throws Exception { 
    return getNode(); 
} 

@Override 
public Class getObjectType() { 
    return Node.class; 
} 

@Override 
public boolean isSingleton() { 
    return true; 
} 

private Node getNode() throws Exception { 

    ImmutableSettings.Builder meineSettings = ImmutableSettings.settingsBuilder(); 
    meineSettings.put("node.name", "orange11-node"); 
    meineSettings.put("path.data", "/Users/lucaarchidiacono/IdeaProjects/moap2/MP3_MoapSampleBuild/data/index"); 
    meineSettings.put("index.store.type", "memory"); 
    meineSettings.put("http.enabled", false); 
    Settings setting = meineSettings.build(); 
    node = NodeBuilder.nodeBuilder().local(true).data(true).clusterName("orange11-cluster").settings(setting).node(); 
    return node; 
} 
} 

IndexService Klasse:

@Service 
public class IndexService { 
private Node node; 
private Client client; 

@Autowired 
public IndexService(Node node) throws Exception { 
    this.node = node; 

    client = this.node.client(); 


    List<Map<String, Object>> data = jsonToMap(); 
    for (int i = 0; i < data.size(); ++i) { 
     Map<String, Object> object = data.get(i); 

     IndexRequest indexRequest = Requests.indexRequest("orange11").type("profile").id(Integer.toString(i)).source(object); 
     IndexResponse indexResponse = client.index(indexRequest).actionGet(); 

     if (indexResponse != null && indexResponse.isCreated()) { 
      System.out.println("Index has been created !"); 
      // read report from response 
      System.out.println("------------------------------"); 
      System.out.println("Index name: " + indexResponse.getIndex()); 
      System.out.println("Type name: " + indexResponse.getType()); 
      System.out.println("ID: " + indexResponse.getId()); 
      System.out.println("Version: " + indexResponse.getVersion()); 
      System.out.println("------------------------------"); 
     } else { 
      System.err.println("Index creation failed."); 
     } 
    } 

} 

public List<Map<String, Object>> jsonToMap() throws IOException { 

    ObjectMapper mapper = new ObjectMapper(); 

    List<Map<String, Object>> listOfMaps = new ArrayList<Map<String, Object>>(); 

    Map<String, Object>[] jsonDocument = mapper.readValue(new File("/Users/lucaarchidiacono/IdeaProjects/moap2/MP3_MoapSampleBuild/data/index/accounts.json"), new TypeReference<HashMap<String, Object>[]>() {}); 

    for (int i = 0; i < jsonDocument.length; i++) { 

     listOfMaps.add(i, jsonDocument[i]); 
    } 

    return listOfMaps; 
} 


} 
+1

was ist die elasticsearch version? –

+0

Es ist Elasticsearchversion 1.7.0 –

+1

Zunächst sollten Sie in eine neuere Version von elasticsearch schauen. Ich denke elasticsearch 1.x erreicht das Ende des Lebens. Sie sollten versuchen, mindestens Version 2.x zu verwenden. –

Antwort

1

Here ist, wie Sie mit eingebetteter Note Einstellung hinzufügen.

Node node = 
    nodeBuilder() 
     .settings(ImmutableSettings.settingsBuilder().put("http.enabled", false)) 
     .client(true) 
    .node(); 

Sie können den Client für den Embedded-Knoten erhalten wie folgt. (Wenn Sie den Verweis auf Node-Objekt haben)

Wenn nicht, können Sie einfach einen neuen Transportclient erstellen, um Abfragen durchzuführen.

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

Dann können Sie Ihren Index bei der Erstellung wie folgt festlegen.

IndexResponse response = client.prepareIndex("twitter", "tweet", "1") 
     .setSource(jsonBuilder() 
        .startObject() 
         .field("user", "kimchy") 
         .field("postDate", new Date()) 
         .field("message", "trying out Elasticsearch") 
        .endObject() 
       ) 
     .setSettings(ImmutableSettings.settingsBuilder().put("**whatever_setting_key**", **whatever_setting_value**)) 
     .execute() 
     .actionGet();. 

EDIT:

können Sie folgende verwenden.

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

// add your setting json here 
String setting_json = "{" + 
     "\"user\":\"kimchy\"," + 
     "\"postDate\":\"2013-01-30\"," + 
     "\"message\":\"trying out Elasticsearch\"" + 
    "}"; 

IndexResponse response = client.admin().indices().prepareCreate("twitter") 
     .setSource(json) 
     .setSetting(setting_json) 
     .execute() 
     .actionGet(); 
+0

Ich finde setSettings() nicht in client.prepareIndex(). SetSource () –

Verwandte Themen