Java与ElasticSerach的整合
通过es的mapping数据结构
定义数据库中的表的结构的定义,通过mapping来控制索引存储数据的设置
定义Index下的字段名(Field Name)
定义字段的类型,比如数值型、字符串型、布尔型等
定义倒排索引相关的配置,比如documentId、记录position、打分等
数据类型
核心数据类型
字符串型:text、keyword
数值型:long、integer、short、byte、double、float、half_float、scaled_float
日期类型:date
布尔类型:boolean
二进制类型:binary
范围类型:integer_range、float_range、long_range、double_range、date_range复杂数据类型
数组类型:array
对象类型:object
嵌套类型:nested object
地理位置数据类型
geo_point(点)、geo_shape(形状)专用类型
记录IP地址ip
实现自动补全completion
记录分词数:token_count
记录字符串hash值母乳murmur3多字段特性multi-fields
允许对同一个字段采用不同的配置,比如分词,例如对人名实现拼音搜索,
只需要在人名中新增一个子字段为pinyin即可
创建mapping
PUT gmall0105
{"mappings": {"PmsSkuInfo":{"properties": {"id":{"type": "keyword","index": true},"skuName":{"type": "text", "analyzer": "ik_max_word"},"skuDesc":{"type": "text", "analyzer": "ik_smart"},"catalog3Id":{"type": "keyword"},"price":{"type": "double"},"skuDefaultImg":{"type": "keyword", "index": false},"hostScore":{"type": "double"},"productId":{"type": "keyword"},"skuAttrValueList":{"properties": {"attrId":{"type":"keyword"},"valueId":{"type":"keyword"}}}}}}
}
Java与ElasticSerach的整合
- 导入Java与ElasticSerach的依赖
<!--es的Java客服端--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- https://mvnrepository.com/artifact/io.searchbox/jest --><dependency><groupId>io.searchbox</groupId><artifactId>jest</artifactId><version>5.3.3</version></dependency><!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>4.5.1</version></dependency>
2.PmsSearchSkuInf与ElasticSearch中的数据结构对应
public class PmsSearchSkuInfo implements Serializable{@Idprivate String id;private String skuName;private String skuDesc;private String catalog3Id;private BigDecimal price;private String skuDefaultImg;private double hostScore;private String productId;private List<PmsSkuAttrValue> skuAttrValueList;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSkuName() {return skuName;}public void setSkuName(String skuName) {this.skuName = skuName;}public String getSkuDesc() {return skuDesc;}public void setSkuDesc(String skuDesc) {this.skuDesc = skuDesc;}public String getCatalog3Id() {return catalog3Id;}public void setCatalog3Id(String catalog3Id) {this.catalog3Id = catalog3Id;}public BigDecimal getPrice() {return price;}public void setPrice(BigDecimal price) {this.price = price;}public String getSkuDefaultImg() {return skuDefaultImg;}public void setSkuDefaultImg(String skuDefaultImg) {this.skuDefaultImg = skuDefaultImg;}public double getHostScore() {return hostScore;}public void setHostScore(double hostScore) {this.hostScore = hostScore;}public String getProductId() {return productId;}public void setProductId(String productId) {this.productId = productId;}public List<PmsSkuAttrValue> getSkuAttrValueList() {return skuAttrValueList;}public void setSkuAttrValueList(List<PmsSkuAttrValue> skuAttrValueList) {this.skuAttrValueList = skuAttrValueList;}
}
3.SkuService.java
public interface SkuService {List<PmsSkuInfo> getAllSku();
}
4.PmsSkuInfoMapper实现mybatis的tk.Mapper
public interface PmsSkuInfoMapper extends Mapper<PmsSkuInfo>{}
5.SkuServiceImpl.java
@Service
public class SkuServiceImpl implements SkuService{@AutowiredPmsSkuInfoMapper pmsSkuInfoMapper;@Overridepublic List<PmsSkuInfo> getAllSku() {List<PmsSkuInfo> pmsSkuInfos = pmsSkuInfoMapper.selectAll();for (PmsSkuInfo pmsSkuInfo : pmsSkuInfos) {String skuId = pmsSkuInfo.getId();PmsSkuAttrValue pmsSkuAttrValue=new PmsSkuAttrValue();pmsSkuAttrValue.setSkuId(skuId);List<PmsSkuAttrValue> pmsSkuAttrValues = pmsSkuAttrValueMapper.select(pmsSkuAttrValue);pmsSkuInfo.setSkuAttrValueList(pmsSkuAttrValues);}return pmsSkuInfos;}
}
6.GmallSearchServiceApplication
public class GmallSearchServiceApplication {@ReferenceSkuService skuService; //查询MySQL@AutowiredJestClient jestClient;@Testpublic void contextLoads() throws IOException {//查询MySQL数据库List<PmsSkuInfo> pmsSkuInfoList=new ArrayList<>();pmsSkuInfoList=skuService.getAllSku();//转化为es的数据结构List<PmsSearchSkuInfo> pmsSearchSkuInfoList=new ArrayList<>();for (PmsSkuInfo pmsSkuInfo : pmsSkuInfoList) {PmsSearchSkuInfo pmsSearchSkuInfo = new PmsSearchSkuInfo();BeanUtils.copyProperties(pmsSkuInfo,pmsSearchSkuInfo);pmsSearchSkuInfoList.add(pmsSearchSkuInfo);}//导入esfor (PmsSearchSkuInfo pmsSearchSkuInfo : pmsSearchSkuInfoList) {Index put = new Index.Builder(pmsSearchSkuInfo).index("gmall0105").type("PmsSkuInfo").id(pmsSearchSkuInfo.getId()).build();jestClient.execute(put);}}}
7.在elastaicSearch中查询
//先过滤后查询一个条件中交集
GET gmall0105/PmsSkuInfo/_search
{"query": {"bool": {"filter":[{"term": {"skuAttrValueList.valueId": "39"}}, {"term": {"skuAttrValueList.valueId": "43"}}], "must": [{"match": {"skuName": "Apple"}}]}}
}
ElasticSearch并集与交集查询
//并集是一个数组
{terms:{"skuAttrValueList.valueId":["39","40","41"]}}
//交际是一个具体值
{term:{"skuArrtValueList.valueId":"39"}}
查询API
//jest的工具SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();//boolBoolQueryBuilder boolQueryBuilder=new BoolQueryBuilder();//filterTermQueryBuilder termQueryBuilder=new TermQueryBuilder("skuAttrValueList.valueId","39");boolQueryBuilder.filter(termQueryBuilder);//mustMatchQueryBuilder matchQueryBuilder=new MatchQueryBuilder("skuName","Apple");boolQueryBuilder.must(matchQueryBuilder);//querysearchSourceBuilder.query(boolQueryBuilder);//fromsearchSourceBuilder.from(0);//sizesearchSourceBuilder.size(20);//hightlightersearchSourceBuilder.highlighter();String delStr=searchSourceBuilder.toString();
Search search = new Search.Builder("dsl的json语句").addIndex("gmall0105").addType("PmsSkuInfo").build();
Java与ElasticSerach的整合相关推荐
- 浅谈PHP与Java之Web开发整合技术
淺談PHP與Java之Web開發整合技術 鄭哲聖郑哲圣 前言 PHP為語法簡單的腳本語言,可以做為HTML的嵌入型語言,而且與Apache網頁伺服器搭配的設定容易.效能亦高. 前言 ...
- 我的世界java版怎么加整合包_我的世界1.9MOD简单整合下载 功能性懒人包
我的世界1.9已经有不少mod推出了,今天给大家带来的这个1.9mod简单整合是一个整合了forge和目前推出的一些简单功能性mod,并且玩家们可以在这个基础上自主添加新mod的特殊整合,这个整合应该 ...
- 【Java进阶】SpringBoot整合Redis
SpringBoot整合Redis SpringBoot 操作数据:spring-data jpa jdbc mongodb redis SpringData 也是和 SpringBoot 齐名的项目 ...
- Java学习之SpringBoot整合SSM Demo
背景:在Java Web中Spring家族有着很重要的地位,之前JAVA开发需要做很多的配置,一堆的配置文件和部署调试一直是JavaWeb开发中的一大诟病,但现在Spring推出了SpringBoot ...
- java web主流框架整合开发 光盘_开发者突击:Java Web主流框架整合开发(第2版)(附CD光盘1张)...
序言 一.了解软件架构 (一)基本概念 (二)软件架构的历史 (三)软件架构的目标 二.J2EE开发模型分析 (一)一层架构模式 (二)两层架构模式Model 1 (三)三层架构模式Model 2 ( ...
- 谷歌了java集成开发_Spring整合Kaptcha谷歌验证码工具的开发步骤
开发步骤: 1.加入依赖 com.google.code.kaptcha kaptcha 2.3 国内镜像无法下载该依赖,需要手动通过jar包在本地仓库安装一个依赖. 安装命令: mvn instal ...
- 代码显示return的用法(c语言和java的比较和整合)
在这里我把java和return的一些讲法做一个整合,基本上是相似的作用. java中return的主要作用: 1.结束当前方法体 2."return 数据"返回方法所要的值或表达 ...
- 我的世界java版怎么加整合包_我的世界整合包入门攻略 整合包怎么使用
我的世界整合包入门攻略,由齐齐乐小白兔带来.有玩家问我的世界整合包怎么使用,不清楚的看下我的世界整合包入门攻略吧. java7和java8基本无区别. 对于整合包 1.7.2及以下的forge(包含部 ...
- 我的世界java版怎么加整合包_我的世界怎么制作整合包
冗余文件的清理 既然是制作较为纯净的整合包,这一步也很关键,在前面安装forge的过程中生成了很多垃圾文件,对于强迫症来说很难受,为了精简整合包的体积,我们得将其清理清理,以下用红框标注的皆为比较重要 ...
最新文章
- 学懂分析,玩转大数据
- Qt webkitwidgets模块和webenginewidgets模块
- Windows 11正式发布,所有用户均可免费升级,还支持安卓应用
- reactjs组件实例三大属性之refs使用示例:字符串形式的ref、回调函数形式的ref、回调ref中回调执行次数的问题
- 非科班的java程序员该如何补充计算机基础知识,需要看哪些书?
- Ubuntu 16.04+.Net Core+Docker+Nginx安装部署
- Android Notification通知详解
- 暨“与孙鑫老师面对面,畅谈程序人生”专题讲座
- hibernate教程笔记1
- AMPL Matlab 自动求导(AD)求解雅克比、海森矩阵
- Google浏览器任务栏图标变白
- HTML中 <img>标签的用法
- 自然语言处理——谷歌BERT模型深度解析
- eve-ng模拟器安装在部署使用
- java解压两层zip文件_Java解压缩zip - 解压缩多个文件或文件夹实例
- 关于三大运营商招聘网站
- 手机的Ram和Rom是什么意思
- 使用geotools构建特殊的多边形
- FTP服务器vsftpd安装架设
- Webpack 4教程:为什么要优化代码
热门文章
- 看看你能认出多少种编程语言
- BA(free scale) network 小结
- TClientDataSet[3]: 手动建立数据集
- 解决Can't connect to MySQL server on 'localhost' (10048)
- 在Flash中调用xml文档
- CG笔记之一——透视投影
- linux 内核日志等级,Linux系统中日志级别详情
- 政策表达式截取json_json格式数据如何提取指定中文字符串。
- python相关性分析的散点图怎么做_Python:matplotlib 和 Seaborn 之散点图和相关性 (三十二)...
- php和python和javascript_Node.js与PHP、Python的字符处理性能对比