经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java中使用elasticsearch搜索引擎实现简单、修改等操作
来源:cnblogs  作者:陈远波  时间:2018/11/9 11:24:10  对本文有异议

以下的操作环境为:jdk:1.8;elasticsearch:5.2.0

maven架包下载坐标为:

  1. <dependency>
  2. <groupId>org.elasticsearch.plugin</groupId>
  3. <artifactId>transport-netty4-client</artifactId>
  4. <version>5.2.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.elasticsearch</groupId>
  8. <artifactId>elasticsearch</artifactId>
  9. <version>5.2.0</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.nlpcn</groupId>
  13. <artifactId>elasticsearch-sql</artifactId>
  14. <version>6.3.0.0</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>com.alibaba</groupId>
  18. <artifactId>druid</artifactId>
  19. <version>1.1.9</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.elasticsearch.client</groupId>
  23. <artifactId>transport</artifactId>
  24. <version>5.2.0</version>
  25. </dependency>

Java创建ES连接工具类:

 

  1. //创建连接工具类
  2. public class ESClientConnectionUtil {
  3. public static TransportClient client=null;
  4. public final static String HOST = "192.168.200.211"; //服务器部署
  5. public final static Integer PORT = 9301; //端口
  6. public static TransportClient getESClientConnection(){
  7. if (client == null) {
  8. System.setProperty("es.set.netty.runtime.available.processors", "false");
  9. try {
  10. //设置集群名称
  11. Settings settings = Settings.builder().put("cluster.name", "es5").put("client.transport.sniff", true).build();
  12. //创建client
  13. client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));
  14. } catch (Exception ex) {
  15. ex.printStackTrace();
  16. System.out.println(ex.getMessage());
  17. }
  18. }
  19. return client;
  20. }
  21. }

 

用Java命令想elasticsearch中插入数据

 

  1. public Map<String,Object> addTopic(KnowledgeTopicDTO knowledgeTopicDTO){
  2. Map<String,Object> map = new HashMap<>();
  3. //连接ES
  4. TransportClient transportClient = ESClientConnectionUtil.getESClientConnection();
  5. JSONObject json = JSONObject.fromObject(knowledgeTopicDTO);//后台传过来的对象数据转换成json格式
  6. try{
  7. //index 索引名称(相当于数据库) type :类型(相当于数据库中的表)
  8. IndexResponse response = transportClient.prepareIndex("knowledge", "knowledge_theme").setSource(json, XContentType.JSON).get();
  9. if(null !=response.getId()){
  10. map.put("code",200);
  11. return map;
  12. }
  13. }catch (Exception e){
  14. e.printStackTrace();
  15. map.put("code",500);
  16. return map;
  17. }
  18. return null;
  19. }

 

使用Java根据id查询数据

 

  1. //连接ES
  2. TransportClient transportClient = ESClientConnectionUtil.getESClientConnection();
  3. //参数:索引名,类型(type) id
  4. GetResponse response = client.prepareGet("knowledge", "knowledge_theme", "1")
  5. .setOperationThreaded(false) // 线程安全
  6. .get();

 

根据id进行修改数据

 

  1. //knowledgeTopic为修改数据的对象
  2. //修改状态后的对象转换成json数据
  3. JSONObject fromObject= JSONObject.fromObject(knowledgeTopic);
  4. //参数:索引名,类型(type) id 要修改的json数据:fromObject
  5. UpdateResponse updateResponse = client.prepareUpdate("knowledge", "knowledge_theme", "1")
  6. .setDoc(fromObject).get();

 

ES模糊查询

 

  1. SearchResponse searchResponse=null;
  2. //连接elasticsearch
  3. TransportClient transportClient = ESClientConnectionUtil.getESClientConnection();
  4. searchResponse = client.prepareSearch()
  5. .setIndices("knowledge")
  6. .setTypes("knowledge_theme")
  7. .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
  8. .setScroll(TimeValue.timeValueMinutes(30)) //游标维持时间
  9. .setSize(2 * 5)//实际返回的数量为10*index的主分片数
  10. .setQuery(QueryBuilders.wildcardQuery("name", ("*"+name+"*").toLowerCase())) //查询的字段名及值
  11. .execute()
  12. .actionGet();

 

以上功能本人已亲测过,都能实现,希望这对大家有所帮助

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号