Elasticsearch demo

来源:互联网 发布:log4j linux 日志格式 编辑:程序博客网 时间:2024/06/05 03:08
package com.xuyw.blog;import java.io.IOException;import java.net.InetAddress;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.update.UpdateRequest;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.script.Script;import org.elasticsearch.script.ScriptService;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.transport.client.PreBuiltTransportClient;import org.junit.Before;import org.junit.Test;import static org.elasticsearch.common.xcontent.XContentFactory.*;import com.alibaba.fastjson.JSON;import com.xuyw.model.Blog;public class BlogTest {    private TransportClient client = null;    @SuppressWarnings("resource")    @Before    public void before() throws Exception {        Map<String, String> map = new HashMap<>();        map.put("cluster.name", "my-application");        Settings settings = Settings.builder().put(map).build();        client = new PreBuiltTransportClient(settings)                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));        System.out.println("Started ES client");    }    /**     * 创建索引     */    @Test    public void testCreateIndex() {        String json = "{" + "\"user\":\"xuyw\"," + "\"postDate\":\"2017-12-08\"," + "\"message\":\"Elasticsearch demo\""                + "}";        IndexResponse response = client.prepareIndex("twitter", "article", "1").setSource(json).get();        System.out.println(" 索引名称:" + response.getIndex());        System.out.println(" 类型名称:" + response.getType());        System.out.println(" 文档id:" + response.getId());        System.out.println(" 版本:" + response.getVersion());    }    /**     * 添加数据     */    @Test    public void testAddData() {        List<String> jsonData = new ArrayList<>();        jsonData.add(JSON.toJSONString(new Blog(1, "git简介", "2016-06-19", "SVN与Git最主要的区别...")));        jsonData.add(JSON.toJSONString(new Blog(2, "Java中泛型的介绍与简单使用", "2016-06-19", "学习目标 掌握泛型的产生意义...")));        jsonData.add(JSON.toJSONString(new Blog(3, "SQL基本操作", "2016-06-19", "基本操作:CRUD ...")));        jsonData.add(JSON.toJSONString(new Blog(4, "Hibernate框架基础", "2016-06-19", "Hibernate框架基础...")));        jsonData.add(JSON.toJSONString(new Blog(5, "Shell基本知识", "2016-06-19", "Shell是什么...")));        for (int i = 0; i < jsonData.size(); i++) {            IndexResponse response = client.prepareIndex("twitter", "article").setSource(jsonData.get(i)).get();            // 输出结果            System.out.println(JSON.toJSON(response));        }    }    /**     * 查找     */    @Test    public void testQuery() {        // 搜索数据        GetResponse response = client.prepareGet("twitter", "article", "1").execute().actionGet();        // 输出结果        System.out.println(response.getSourceAsString());    }    /**     * 查找     */    @Test    public void testQuery2() {        // 单个字段的查询        QueryBuilder qb1 = QueryBuilders.termQuery("title", "hibernate");        // 多个字段的查询        QueryBuilder qb2 = QueryBuilders.multiMatchQuery("git", "title", "content");        // 搜索数据        SearchResponse response = client.prepareSearch("twitter").setTypes("article").setQuery(qb1).execute()                .actionGet();        SearchHits hits = response.getHits();        if (hits.totalHits() > 0) {            for (SearchHit hit : hits) {                System.out.println("score:" + hit.getScore() + ":\t" + hit.getSource());// .get("title")            }        } else {            System.out.println("搜到0条结果");        }    }    @Test    public void testUpdate() throws Exception {        // 方法一:创建一个UpdateRequest,然后将其发送给client.        UpdateRequest uRequest = new UpdateRequest();        uRequest.index("twitter");        uRequest.type("article");        uRequest.id("1");        uRequest.doc(jsonBuilder().startObject().field("content", "学习目标 掌握java泛型的产生意义update").endObject());        // client.update(uRequest).get();        // 方法二:prepareUpdate() 使用脚本更新索引        // elasticsearch.yml,新增一行:script.engine.groovy.inline.update: on        /*         * client.prepareUpdate("twitter", "article", "1").setScript(new         * Script("ctx._source.title = \"git入门\"")).get();         */        // 方法三:prepareUpdate() 使用doc更新索引        /*         * client.prepareUpdate("twitter", "article", "1")         * .setDoc(jsonBuilder().startObject().field("content",         * "SVN与Git对比。。。").endObject()).get();         */        // 方法四: 增加新的字段        UpdateRequest updateRequest = new UpdateRequest("twitter", "article", "1")                .doc(jsonBuilder().startObject().field("commet", "0").endObject());        // client.update(updateRequest).get();        // 方法五:upsert 如果文档不存在则创建新的索引        IndexRequest indexRequest = new IndexRequest("twitter", "article", "10").source(                jsonBuilder().startObject().field("title", "Git安装10").field("content", "学习目标 git。。。10").endObject());        UpdateRequest uRequest2 = new UpdateRequest("twitter", "article", "10")                .doc(jsonBuilder().startObject().field("title", "Git安装").field("content", "学习目标 git。。。").endObject())                .upsert(indexRequest);        client.update(uRequest2).get();    }    @Test    public void testDelete() {        //ID 删除        DeleteResponse dResponse = client.prepareDelete("twitter", "article", "10").execute().actionGet();        System.out.println(JSON.toJSONString(dResponse));    }}
原创粉丝点击