Elasticsearch 2.20 JAVA開發篇:索引文檔操作
來自: http://my.oschina.net/secisland/blog/616549
既然是開發篇,主要以代碼為主,輔助一些說明。所有的內容都是代碼實際應該驗證過的。
引入的頭文件:
import static org.elasticsearch.node.NodeBuilder.nodeBuilder; import java.io.IOException; import java.net.InetAddress; import java.util.Date; import java.util.Map; import java.util.Set; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.ClusterAdminClient; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.cluster.health.ClusterIndexHealth; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.node.Node; import static org.elasticsearch.common.xcontent.XContentFactory.*;
創建索引
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(); 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."); }
增加文檔
IndexResponse response = client .prepareIndex(indexName, type, "1") .setSource(//這里可以直接用json字符串 jsonBuilder().startObject() .field("type", "syslog") .field("eventCount", 1) .field("eventDate", new Date()) .field("message", "secilog insert doc test") .endObject()).get(); System.out.println("index:"+response.getIndex() +" insert doc id:"+response.getId() +" result:"+response.isCreated());
查詢文檔
GetResponse response = client.prepareGet("secilog", "log", "1").get(); String source = response.getSource().toString(); long version = response.getVersion(); String indexName = response.getIndex(); String type = response.getType(); String id = response.getId();
本文由賽克藍德(secisland)原創,轉載請標明作者和出處。
修改文檔
修改文檔有兩種方式,一種是直接修改,另一種是如果文檔不存在則插入存在則修改。
第一種代碼
UpdateRequest updateRequest = new UpdateRequest(); updateRequest.index(indexName); updateRequest.type(type); updateRequest.id("1"); updateRequest.doc(jsonBuilder() .startObject() .field("type", "file") .endObject()); client.update(updateRequest).get();
第二種代碼:
IndexRequest indexRequest = new IndexRequest(indexName, type, "3") .source(jsonBuilder() .startObject() .field("type", "syslog") .field("eventCount", 2) .field("eventDate", new Date()) .field("message", "secilog insert doc test") .endObject()); UpdateRequest updateRequest = new UpdateRequest(indexName, type, "3") .doc(jsonBuilder() .startObject() .field("type", "file") .endObject()) .upsert(indexRequest); client.update(updateRequest).get();
刪除文檔
DeleteResponse dresponse = client.prepareDelete("secilog", "log", "4").get(); boolean isFound = dresponse.isFound(); //文檔存在返回true,不存在返回false;
刪除索引
DeleteIndexRequest delete = new DeleteIndexRequest("secilog"); client.admin().indices().delete(delete);
賽克藍德(secisland)后續會逐步對Elasticsearch的最新版本的各項功能進行分析,近請期待。也歡迎加入secisland公眾號進行關注。
本文由用戶 CorneliusAl 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!