Elasticsearch 2.20 JAVA開發篇:索引文檔操作

CorneliusAl 8年前發布 | 48K 次閱讀 ElasticSearch 搜索引擎

來自: 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!