1 JAVA客戶端連接
Eclipse測試時候
需要在在main方法的類中右鍵選擇run configurations,在Arguments標籤頁下的vm arguments輸入:-Des.path.home=-Des.path.home即可。比如:
-Des.path.home=Eelasticsearch安裝目錄
1.1 JAR包
Jar可以從elasticsearch服務端 lib文件夾下拷取
1.2 連接方式
方式一 節點方式連接
// on startup Node node = nodeBuilder().node(); Client client = node.client(); // on shutdown node.close(); |
方式二 遠程連接方式 推薦
// on startup Client client = TransportClient.builder().build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); // on shutdown client.close(); |
方式三 自動添加集羣
Settings settings = Settings.settingsBuilder().put("client.transport.sniff", true).build(); TransportClient client = TransportClient.builder().settings(settings).build(); |
1.3 添加索引
String type = "one"; XContentBuilder mapping = XContentFactory .jsonBuilder() .startObject() .startObject("settings") .field("number_of_shards", 1) // 設置分片數量 .field("number_of_replicas", 0) // 設置副本數量 .endObject() .endObject() .startObject() .startObject(type) // type名稱 .startObject("properties") // 下面是設置文檔列屬性。 .startObject("type").field("type", "string").field("store", "yes").endObject() .startObject("eventCount").field("type", "long").field("store", "yes").endObject() .startObject("eventDate").field("type", "date").field("format", "dateOptionalTime") .field("store", "yes").endObject().startObject("message").field("type", "string") .field("index", "not_analyzed").field("store", "yes").endObject().endObject().endObject().endObject();
String indexName = "this_one"; CreateIndexRequestBuilder cirb = client.admin().indices().prepareCreate(indexName)// index名稱 .setSource(mapping);
CreateIndexResponse response = cirb.execute().actionGet(); if (response.isAcknowledged()) { System.out.println("Index created."); } else { System.err.println("Index creation failed."); } |
1.4 添加文檔
// 添加文檔 IndexResponse response = client .prepareIndex(indexName, type, "1") .setSource(// 這裏可以直接用son字符串 XContentFactory.jsonBuilder().startObject().field("type", "syslog").field("eventCount", 1) .field("eventDate", new Date()).field("message", "sec log insert doc test").endObject()) .get(); System.out.println("index:" + response.getIndex() + " insert doc id:" + response.getId() + " result:" + response.isCreated()); |
1.5 查詢文檔
1.5.1 指定ID查詢
// 查詢文檔 GetResponse response = client.prepareGet("this_one", "one", "1").get(); String source = response.getSource().toString(); long version = response.getVersion(); String indexName_ = response.getIndex(); String type_ = response.getType(); String id = response.getId(); System.out.println(response.getSource().get("message")); System.out.println(source); System.out.println("index:" + indexName_ + " insert doc id:" + id + " type_:" + type_ + " version:" + version); |
1.5.2 指定字段查詢
SearchRequestBuilder sbuilder = client.prepareSearch(indexName) // index name .setTypes(type) // type name .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(QueryBuilders.termQuery("message", "中文")) // Query //.setPostFilter(QueryBuilders.rangeQuery("eventCount").from(1).to(18)) // Filter .setFrom(0).setSize(20).setExplain(true); System.out.println(sbuilder.toString()); SearchResponse response = sbuilder.execute().actionGet(); System.out.println(response.toString()); |
1.5.3 表達式查詢
QueryBuilder query = QueryBuilders.queryStringQuery("content=中國 or author=無名"); SearchRequestBuilder sbuilder = client.prepareSearch(indexName) // index name .setTypes(type) // type name .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(query) //.setPostFilter(QueryBuilders.rangeQuery("eventCount").from(1).to(18)) // Filter .setFrom(0).setSize(20).setExplain(true); System.out.println(sbuilder.toString()); SearchResponse response = sbuilder.execute().actionGet(); System.out.println(response.toString()); |