Java中使用elasticsearch搜索引擎实现简单查询、修改等操作-已在项目中实际应用
以下的操作环境为: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();
- 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进行修改数据(传入对象)
- //knowledgeTopic为修改数据的对象
- //修改状态后的对象转换成json数据
- JSONObject fromObject= JSONObject.fromObject(knowledgeTopic);
- //参数:索引名,类型(type) id(指的是_id) 要修改的json数据:fromObject
- UpdateResponse updateResponse = client.prepareUpdate("knowledge", "knowledge_theme", "1")
- .setDoc(fromObject).get();
根据id修改数据(针对单个字段修改)
- XContentBuilder source = null;
- try {
- source = XContentFactory.jsonBuilder()
- .startObject()
- .field("browseNum", num) //browseNum:要修改的字段名,num 修改的值
- .endObject();
- } catch (IOException e) {
- e.printStackTrace();
- }
//client:ES连接 codes为文档的_id- UpdateResponse updateResponse = client.prepareUpdate("article", "up_information", codes).setDoc(source).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();
以上功能本人已亲测过,都能实现,希望这对大家有所帮助!转发请说明出处,本人的博客地址为:https://www.cnblogs.com/chenyuanbo/
技术在于交流!
Java中使用elasticsearch搜索引擎实现简单查询、修改等操作-已在项目中实际应用的更多相关文章
- 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...
- java使用elasticsearch进行模糊查询-已在项目中实际应用
java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...
- 四十四 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
1.elasticsearch(搜索引擎)的查询 elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据 查询分类: 基本查询:使用elasticsearch内 ...
- React-Native集成到已有项目中的总结
安装Python 从官网下载并安装python 2.7.x(3.x版本不行) 安装node.js 从官网下载node.js的官方V6.X.X版本或更高版本.安装完成后检测是否安装成功:node -v ...
- mybatis查询修改同时操作
update dic_purchase set state =0 where purchase_number in (select tmp.* from (select purchase_number ...
- ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings,及.NET Core控制台项目中读取AppSettings
问: ASP.NET CORE MVC 如何在Filter中使用依赖注入来读取AppSettings 答: Dependency injection is possible in filters as ...
- java中的ElasticSearch搜索引擎介绍。
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- MyBatis一对多映射简单查询案例(嵌套Mapper映射文件中的sql语句)
一.案例描述 书本类别表和书本信息表,查询书本类别表中的某一记录,连带查询出所有该类别书本的信息. 二.数据库表格 书本类别表(booktypeid,booktypename) 书本信息表(booki ...
- sql 简单查询修改
.group by order by from webdb where gathtrime between '2017-06-14 00:00:00' and '2017-06-14 23:59:59 ...
随机推荐
- VB.NET获取系统特殊目录
For Each x In GetType(System.Environment.SpecialFolder).GetEnumValues Debug.Print("{0} {1}" ...
- ASP.NET登录验证
protected void btnLogin_Click(object sender, EventArgs e) { string username = txtUserName.Value.Trim ...
- [面试]中高级测试工程师必备,月薪15K+
1.你的测试职业发展是什么? 测试经验越多,测试能力越高.所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去.而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求 ...
- Flask 系列之 LoginManager
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 flask-login 进行会话管理的相关操作 ...
- 写一个可插入自定义标签的 Textarea 组件
- “插入自定义标签是什么鬼?” - “比如你要插入一个<wise></wise>的标签...” - “什么情况下会有这种需求?” - “得罪了产品的情况下...” 一.需求背 ...
- vue从入门到进阶:组件Component详解(六)
一.什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功 ...
- 洛谷P4462 [CQOI2018]异或序列(莫队)
题意 题目链接 Sol 一开始以为K每次都是给出的想了半天不会做. 然而发现读错题了维护个前缀异或和然后直接莫队搞就行,. #include<bits/stdc++.h> #define ...
- 我写的.net相关的文章
此文正在更新中... 广州.net俱乐部相关 复活广州.net俱乐部 office365的开发者训练营,免费,在微软广州举办 被低估的.net(上) - 微软MonkeyFest 2018广州分享会活 ...
- Android-textview图文混排(网络图片)
工作太忙,不做过多的解释了,核心是用到了 SpannableStringBuilder Glide 和 Rxjava 直接上代码了,就两个类. public class ImageSpanAsyn ...
- 数学建模-灰色预测模型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 ...