2017-02-15 24 views
0

Hello Elasticsearchfriends。Elasticsearch Java Apiインデックス設定の設定

私はタイプバイナリ検索アナライザについて苦労しています。 NodeFactoryがあり、そこにノードを作成します。私のIndexServiceクラスよりも、いくつかのデータを持つjsonファイル全体をインデックスします。私はElasticsearchプロではないので、インデックスに設定を追加する方法や、ノードに設定を追加する必要があるかどうかを知りたいのです。

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クラス:

@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

elasticsearchのバージョンは何ですか? –

+0

It's Elasticsearchversion 1.7.0 –

+1

まず、新しいバージョンのelasticsearchを調べるべきです。私はelasticsearch 1.xが終わりに近づいていると思います。少なくとも2.xバージョンを使用するようにしてください。 –

答えて

1

Hereはあなたが埋め込まれたノートに設定を追加する方法です。

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

この埋め込みノードのクライアントは、次のように取得できます。 (Nodeオブジェクトへの参照を持っている場合)

新しいトランスポートクライアントを作成してクエリを作成するだけで済みます。

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

次に、作成時に次のようにインデックスを設定できます。

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:

次を使用することができます。

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

私はclient.prepareIndex()でsetSettings()を見つけることができません。 ) –

関連する問題