2017-02-15 83 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

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

您可以获得该嵌入式节点的客户端,如下所示。 (如果你有参考节点对象)

Client client = node.client(); 

如果没有,你可以简单地创建新的传输客户端进行查询。

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

编辑:

您可以使用以下。

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()。setSource()中找到setSettings() ) –