elasticsearch——Java api简单操作

本文介绍了一个基于Elasticsearch实现的数据存取案例,包括连接Elasticsearch集群、存入及删除数据、根据ID查询数据和根据微信用户名进行模糊查询等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * \* 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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CopyProfessor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值