Java中使用elasticsearch搜索引擎实现简单、修改等操作
程序员文章站
2022-04-15 16:57:16
以下的操作环境为:jdk:1.8;elasticsearch:5.2.0 maven架包下载坐标为: Java创建ES连接工具类: 用Java命令想elasticsearch中插入数据 使用Java根据id查询数据 根据id进行修改数据 ES模糊查询 以上功能本人已亲测过,都能实现,希望这对大家有所 ......
以下的操作环境为:jdk:1.8;elasticsearch:5.2.0
maven架包下载坐标为:
<dependency> <groupid>org.elasticsearch.plugin</groupid> <artifactid>transport-netty4-client</artifactid> <version>5.2.0</version> </dependency> <dependency> <groupid>org.elasticsearch</groupid> <artifactid>elasticsearch</artifactid> <version>5.2.0</version> </dependency> <dependency> <groupid>org.nlpcn</groupid> <artifactid>elasticsearch-sql</artifactid> <version>6.3.0.0</version> </dependency> <dependency> <groupid>com.alibaba</groupid> <artifactid>druid</artifactid> <version>1.1.9</version> </dependency> <dependency> <groupid>org.elasticsearch.client</groupid> <artifactid>transport</artifactid> <version>5.2.0</version> </dependency>
java创建es连接工具类:
//创建连接工具类 public class esclientconnectionutil { public static transportclient client=null; public final static string host = "192.168.200.211"; //服务器部署 public final static integer port = 9301; //端口 public static transportclient getesclientconnection(){ if (client == null) { system.setproperty("es.set.netty.runtime.available.processors", "false"); try { //设置集群名称 settings settings = settings.builder().put("cluster.name", "es5").put("client.transport.sniff", true).build(); //创建client client = new prebuilttransportclient(settings).addtransportaddress(new inetsockettransportaddress(inetaddress.getbyname(host), port)); } catch (exception ex) { ex.printstacktrace(); system.out.println(ex.getmessage()); } } return client; } }
用java命令想elasticsearch中插入数据
public map<string,object> addtopic(knowledgetopicdto knowledgetopicdto){ map<string,object> map = new hashmap<>(); //连接es transportclient transportclient = esclientconnectionutil.getesclientconnection(); jsonobject json = jsonobject.fromobject(knowledgetopicdto);//后台传过来的对象数据转换成json格式 try{ //index 索引名称(相当于数据库) type :类型(相当于数据库中的表) indexresponse response = transportclient.prepareindex("knowledge", "knowledge_theme").setsource(json, xcontenttype.json).get(); if(null !=response.getid()){ map.put("code",200); return map; } }catch (exception e){ e.printstacktrace(); map.put("code",500); return map; } return null; }
使用java根据id查询数据
//连接es transportclient transportclient = esclientconnectionutil.getesclientconnection(); //参数:索引名,类型(type) id getresponse response = client.prepareget("knowledge", "knowledge_theme", "1") .setoperationthreaded(false) // 线程安全 .get();
根据id进行修改数据
//knowledgetopic为修改数据的对象 //修改状态后的对象转换成json数据 jsonobject fromobject= jsonobject.fromobject(knowledgetopic); //参数:索引名,类型(type) id 要修改的json数据:fromobject updateresponse updateresponse = client.prepareupdate("knowledge", "knowledge_theme", "1") .setdoc(fromobject).get();
es模糊查询
searchresponse searchresponse=null; //连接elasticsearch transportclient transportclient = esclientconnectionutil.getesclientconnection(); searchresponse = client.preparesearch() .setindices("knowledge") .settypes("knowledge_theme") .setsearchtype(searchtype.dfs_query_then_fetch) .setscroll(timevalue.timevalueminutes(30)) //游标维持时间 .setsize(2 * 5)//实际返回的数量为10*index的主分片数 .setquery(querybuilders.wildcardquery("name", ("*"+name+"*").tolowercase())) //查询的字段名及值 .execute() .actionget();
以上功能本人已亲测过,都能实现,希望这对大家有所帮助