• 通过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的整合

  1. 导入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的整合相关推荐

  1. 浅谈PHP与Java之Web开发整合技术

      淺談PHP與Java之Web開發整合技術      鄭哲聖郑哲圣   前言 PHP為語法簡單的腳本語言,可以做為HTML的嵌入型語言,而且與Apache網頁伺服器搭配的設定容易.效能亦高. 前言 ...

  2. 我的世界java版怎么加整合包_我的世界1.9MOD简单整合下载 功能性懒人包

    我的世界1.9已经有不少mod推出了,今天给大家带来的这个1.9mod简单整合是一个整合了forge和目前推出的一些简单功能性mod,并且玩家们可以在这个基础上自主添加新mod的特殊整合,这个整合应该 ...

  3. 【Java进阶】SpringBoot整合Redis

    SpringBoot整合Redis SpringBoot 操作数据:spring-data jpa jdbc mongodb redis SpringData 也是和 SpringBoot 齐名的项目 ...

  4. Java学习之SpringBoot整合SSM Demo

    背景:在Java Web中Spring家族有着很重要的地位,之前JAVA开发需要做很多的配置,一堆的配置文件和部署调试一直是JavaWeb开发中的一大诟病,但现在Spring推出了SpringBoot ...

  5. java web主流框架整合开发 光盘_开发者突击:Java Web主流框架整合开发(第2版)(附CD光盘1张)...

    序言 一.了解软件架构 (一)基本概念 (二)软件架构的历史 (三)软件架构的目标 二.J2EE开发模型分析 (一)一层架构模式 (二)两层架构模式Model 1 (三)三层架构模式Model 2 ( ...

  6. 谷歌了java集成开发_Spring整合Kaptcha谷歌验证码工具的开发步骤

    开发步骤: 1.加入依赖 com.google.code.kaptcha kaptcha 2.3 国内镜像无法下载该依赖,需要手动通过jar包在本地仓库安装一个依赖. 安装命令: mvn instal ...

  7. 代码显示return的用法(c语言和java的比较和整合)

    在这里我把java和return的一些讲法做一个整合,基本上是相似的作用. java中return的主要作用: 1.结束当前方法体 2."return 数据"返回方法所要的值或表达 ...

  8. 我的世界java版怎么加整合包_我的世界整合包入门攻略 整合包怎么使用

    我的世界整合包入门攻略,由齐齐乐小白兔带来.有玩家问我的世界整合包怎么使用,不清楚的看下我的世界整合包入门攻略吧. java7和java8基本无区别. 对于整合包 1.7.2及以下的forge(包含部 ...

  9. 我的世界java版怎么加整合包_我的世界怎么制作整合包

    冗余文件的清理 既然是制作较为纯净的整合包,这一步也很关键,在前面安装forge的过程中生成了很多垃圾文件,对于强迫症来说很难受,为了精简整合包的体积,我们得将其清理清理,以下用红框标注的皆为比较重要 ...

最新文章

  1. 学懂分析,玩转大数据
  2. Qt webkitwidgets模块和webenginewidgets模块
  3. Windows 11正式发布,所有用户均可免费升级,还支持安卓应用
  4. reactjs组件实例三大属性之refs使用示例:字符串形式的ref、回调函数形式的ref、回调ref中回调执行次数的问题
  5. 非科班的java程序员该如何补充计算机基础知识,需要看哪些书?
  6. Ubuntu 16.04+.Net Core+Docker+Nginx安装部署
  7. Android Notification通知详解
  8. 暨“与孙鑫老师面对面,畅谈程序人生”专题讲座
  9. hibernate教程笔记1
  10. AMPL Matlab 自动求导(AD)求解雅克比、海森矩阵
  11. Google浏览器任务栏图标变白
  12. HTML中 <img>标签的用法
  13. 自然语言处理——谷歌BERT模型深度解析
  14. eve-ng模拟器安装在部署使用
  15. java解压两层zip文件_Java解压缩zip - 解压缩多个文件或文件夹实例
  16. 关于三大运营商招聘网站
  17. 手机的Ram和Rom是什么意思
  18. 使用geotools构建特殊的多边形
  19. FTP服务器vsftpd安装架设
  20. Webpack 4教程:为什么要优化代码

热门文章

  1. 看看你能认出多少种编程语言
  2. BA(free scale) network 小结
  3. TClientDataSet[3]: 手动建立数据集
  4. 解决Can't connect to MySQL server on 'localhost' (10048)
  5. 在Flash中调用xml文档
  6. CG笔记之一——透视投影
  7. linux 内核日志等级,Linux系统中日志级别详情
  8. 政策表达式截取json_json格式数据如何提取指定中文字符串。
  9. python相关性分析的散点图怎么做_Python:matplotlib 和 Seaborn 之散点图和相关性 (三十二)...
  10. php和python和javascript_Node.js与PHP、Python的字符处理性能对比