以下的操作环境为: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.  
  22. }

用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();
  1. JSONObject obj = new JSONObject().fromObject(response.getSourceAsString());//将json字符串转换为json对象
    InformationDTO information = (InformationDTO) JSONObject.toBean(obj, InformationDTO.class);//将json数据转换成InformationDTO实体对象
    String codes =response.getId();//获取_id

根据id进行修改数据(传入对象)

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

根据id修改数据(针对单个字段修改)

  1. XContentBuilder source = null;
  2. try {
  3. source = XContentFactory.jsonBuilder()
  4. .startObject()
  5. .field("browseNum", num) //browseNum:要修改的字段名,num 修改的值
  6. .endObject();
  7. } catch (IOException e) {
  8. e.printStackTrace();
  9. }
    //client:ES连接 codes为文档的_id
  10. UpdateResponse updateResponse = client.prepareUpdate("article", "up_information", codes).setDoc(source).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();

以上功能本人已亲测过,都能实现,希望这对大家有所帮助!转发请说明出处,本人的博客地址为:https://www.cnblogs.com/chenyuanbo/

技术在于交流!

Java中使用elasticsearch搜索引擎实现简单查询、修改等操作-已在项目中实际应用的更多相关文章

  1. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

  2. java使用elasticsearch进行模糊查询-已在项目中实际应用

    java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...

  3. 四十四 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    1.elasticsearch(搜索引擎)的查询 elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据 查询分类: 基本查询:使用elasticsearch内 ...

  4. React-Native集成到已有项目中的总结

    安装Python 从官网下载并安装python 2.7.x(3.x版本不行) 安装node.js 从官网下载node.js的官方V6.X.X版本或更高版本.安装完成后检测是否安装成功:node -v ...

  5. mybatis查询修改同时操作

    update dic_purchase set state =0 where purchase_number in (select tmp.* from (select purchase_number ...

  6. ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings,及.NET Core控制台项目中读取AppSettings

    问: ASP.NET CORE MVC 如何在Filter中使用依赖注入来读取AppSettings 答: Dependency injection is possible in filters as ...

  7. java中的ElasticSearch搜索引擎介绍。

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  8. MyBatis一对多映射简单查询案例(嵌套Mapper映射文件中的sql语句)

    一.案例描述 书本类别表和书本信息表,查询书本类别表中的某一记录,连带查询出所有该类别书本的信息. 二.数据库表格 书本类别表(booktypeid,booktypename) 书本信息表(booki ...

  9. sql 简单查询修改

    .group by order by from webdb where gathtrime between '2017-06-14 00:00:00' and '2017-06-14 23:59:59 ...

随机推荐

  1. VB.NET获取系统特殊目录

    For Each x In GetType(System.Environment.SpecialFolder).GetEnumValues Debug.Print("{0} {1}" ...

  2. ASP.NET登录验证

    protected void btnLogin_Click(object sender, EventArgs e) { string username = txtUserName.Value.Trim ...

  3. [面试]中高级测试工程师必备,月薪15K+

    1.你的测试职业发展是什么? 测试经验越多,测试能力越高.所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去.而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求 ...

  4. Flask 系列之 LoginManager

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 flask-login 进行会话管理的相关操作 ...

  5. 写一个可插入自定义标签的 Textarea 组件

    - “插入自定义标签是什么鬼?” - “比如你要插入一个<wise></wise>的标签...” - “什么情况下会有这种需求?” - “得罪了产品的情况下...” 一.需求背 ...

  6. vue从入门到进阶:组件Component详解(六)

    一.什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功 ...

  7. 洛谷P4462 [CQOI2018]异或序列(莫队)

    题意 题目链接 Sol 一开始以为K每次都是给出的想了半天不会做. 然而发现读错题了维护个前缀异或和然后直接莫队搞就行,. #include<bits/stdc++.h> #define ...

  8. 我写的.net相关的文章

    此文正在更新中... 广州.net俱乐部相关 复活广州.net俱乐部 office365的开发者训练营,免费,在微软广州举办 被低估的.net(上) - 微软MonkeyFest 2018广州分享会活 ...

  9. Android-textview图文混排(网络图片)

    工作太忙,不做过多的解释了,核心是用到了 SpannableStringBuilder  Glide  和 Rxjava 直接上代码了,就两个类. public class ImageSpanAsyn ...

  10. 数学建模-灰色预测模型GM(1,1)_MATLAB

    GM(1,1).m %建立符号变量a(发展系数)和b(灰作用量) syms a b; c = [a b]'; %原始数列 A A = [174, 179, 183, 189, 207, 234, 22 ...