elasticsearch——Java api简单操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lhc2207221755/article/details/80247672
/**
 * \* Created: liuhuichao
 * \* Date: 2018/5/8
 * \* Time: 下午9:35
 * \* Description: es simple api use
 * \
 */
public class SimpleEsTest {

    private TransportClient client;
    private IndexRequest source;

    /**
     * es 连接测试
     * @throws Exception
     */
    @Before
    public void getConnectTest() throws Exception{
        // 通过setting对象指定集群配置信息,
        // 配置的集群名
        Settings settings = Settings.settingsBuilder().put("cluster.name", "elasticsearch_wenbronk") // 设置集群名
                .put("client.transport.ignore_cluster_name", true) // 忽略集群名字验证, 打开后集群名字不对也能连接上
                //探测集群中机器状态
                .put("client.transport.sniff", true)
                .build();
        client = TransportClient.builder().settings(settings).build()
                .addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("127.0.0.1", 9300)));
        // 默认5s
        // 多久打开连接, 默认5s
        System.out.println("success connect");
    }

    /**
     * 存入数据
     */
    @Test
    public void addDataToESTest(){
        UserInfoEntity userInfo=new UserInfoEntity();
        userInfo.setWechatName("爱爱爱爱菠萝");
        userInfo.setId(1);
        String jsonData= com.alibaba.fastjson.JSONObject.toJSONString(userInfo);
        //在这里创建我们要索引的对象
        IndexResponse response = client.prepareIndex("t_user_info", "user")
                //必须为对象单独指定ID
                .setId("2")
                .setSource(jsonData)
                .execute()
                .actionGet();
        //多次index这个版本号会变
        System.out.println("response.version():"+response.getVersion());
        client.close();
    }


    /**
     * 根据id删除数据
     */
    @Test
    public void deleteDataById(){
        //在这里创建我们要索引的对象
        DeleteResponse response = client.prepareDelete("t_user_info", "user", "2")
                .execute().actionGet();
        System.out.println(response.getId());
        System.out.println(com.alibaba.fastjson.JSONObject.toJSONString(response.getHeaders()));
    }
    /**
     * 根据id查询
     */
    @Test
    public void queryDataByIdTest(){
        //在这里创建我们要索引的对象
        GetResponse response = client.prepareGet("t_user_info", "user", "1")
                .execute().actionGet();
        System.out.println("response.getId():"+response.getId());
        System.out.println("response.getSourceAsString():"+response.getSourceAsString());
    }

    /**
     * 根据微信用户名模糊查询用户
     */

    @Test
    public void queryDataGyWeChatName(){
        /**
         * 使用QueryBuilder
         * termQuery("key", obj) 完全匹配
         * termsQuery("key", obj1, obj2..)   一次匹配多个值
         * matchQuery("key", Obj) 单个匹配, field不支持通配符, 前缀具高级特性
         * multiMatchQuery("text", "field1", "field2"..);  匹配多个字段, field有通配符忒行
         * matchAllQuery();         匹配所有文件
         */
        QueryBuilder queryBuilder = QueryBuilders.termsQuery("wechatName","lhc爱吃");
        searchFunction(queryBuilder);
    }

    /**
     * 多字段匹配
     */
    @Test
    public void multiKeysMatchTest(){
        String keyWord="lhc";
        //多个字段匹配
        MultiMatchQueryBuilder query = QueryBuilders.multiMatchQuery( keyWord,"wechatName");
        searchFunction(query);
    }


    /**
     * 处理结果
     * @param queryBuilder
     */
    private void searchFunction(QueryBuilder queryBuilder) {
        SearchResponse response = client.prepareSearch("t_user_info")
                .setTypes("user")
                .setScroll(new TimeValue(60000))
                .setQuery(queryBuilder)
                .setSize(100).execute().actionGet();

        for (SearchHit hit : response.getHits()) {
            System.out.println("********[id]="+hit.getSource().get("id"));
            System.out.println("********[wechatName]="+hit.getSource().get("wechatName"));
        }
    }

}

ps,附上entithy类:

public class UserInfoEntity {
    /**
     * id
     */
    private long id;
    /**
     * 用户的来源渠道类型
     */
    private int channelType;
    /**
     * 用户的来源渠道ID
     */
    private long channelId;
    /**
     * 用户的微信号
     */
    private String wechat;
    /**
     * 用户的微信昵称
     */
    private String wechatName;
    /**
     * 用户的QQ号
     */
    private String qq;
    /**
     * 额外的信息
     */
    private String extra;

    public int getChannelType() {
        return channelType;
    }

    public void setChannelType(int channelType) {
        this.channelType = channelType;
    }

    public long getChannelId() {
        return channelId;
    }

    public void setChannelId(long channelId) {
        this.channelId = channelId;
    }

    public String getWechat() {
        return wechat;
    }

    public void setWechat(String wechat) {
        this.wechat = wechat;
    }

    public String getWechatName() {
        return wechatName;
    }

    public void setWechatName(String wechatName) {
        this.wechatName = wechatName;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    public String getExtra() {
        return extra;
    }

    public void setExtra(String extra) {
        this.extra = extra;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}

猜你喜欢

转载自blog.csdn.net/lhc2207221755/article/details/80247672