es的优势
系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 系列文章目录
- 前言
- 一、es为什么比mysql快
- 二、使用步骤
- 1.引入库
- 2. es查询语法
- 三,api功能
- 总结
前言
总结es优势
一、es为什么比mysql快
- es是一个基于Lucene引擎库,基于内存,查询速度比mysql,这个是在存储方式的比较
- 第二是数据存储方式,
倒排索引,存储方式,可以快速找到数据的大概位置,文档列表,利用二叉查询方法进行寻找方式 - es支持复杂的语法格式,寻找附近酒店,进行分页
- 缺点
- 过于占内存
二、使用步骤
1.引入库
代码如下(示例):
package com.cn;import com.alibaba.fastjson.JSON;
import com.cn.mapper.ESMapper;
import com.cn.pojo.Hotel;
import com.cn.pojo.TbHotel;
import com.cn.pojo.vo.TbHotelVo;
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest
public class EsTest {@Autowiredprivate RestHighLevelClient client;@Autowiredprivate ESMapper esMapper;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.36.128:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}/*** 判断索引是否存在* @throws IOException*/@Testpublic void getIndexRequest() throws IOException {GetIndexRequest request = new GetIndexRequest("tiantian");boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists?"不能再":"我问");}/*** 批量导入文档* @throws IOException*/@Testpublic void c() throws IOException {List<Hotel> hotels = new ArrayList<>();for (int i = 0; i < 50; i++) {Hotel hotel = new Hotel();hotel.setId(Long.valueOf(i));hotel.setAge(i);hotel.setAddress("我的地址方式"+i);hotel.setTime(new Date());hotel.setName("将来"+i);hotel.setLatLon("23.5","3"+i);hotel.setLocation("23.5","3"+i);hotels.add(hotel);}//批量导入BulkRequest bulkRequest = new BulkRequest();//转化文档for (Hotel hotel : hotels) {bulkRequest.add(new IndexRequest("tiantian").id(hotel.getId().toString()).source(JSON.toJSONString(hotel), XContentType.JSON));}//发送请求BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk);}/*** 导入数据信息* @throws IOException*/@Testpublic void bulkRequest() throws IOException {BulkRequest bulkRequest = new BulkRequest();List<TbHotel> tbHotels = esMapper.selectList(null);for (TbHotel tbHotel : tbHotels) {TbHotelVo tbHotelVo = new TbHotelVo(tbHotel);bulkRequest.add(new IndexRequest("hotel").id(tbHotelVo.getId().toString()).source(JSON.toJSONString(tbHotelVo),XContentType.JSON));}client.bulk(bulkRequest,RequestOptions.DEFAULT);}/*** 查询所有文档信息* @throws IOException*/@Testpublic void testMatchAll() throws IOException {SearchRequest request = new SearchRequest("hotel");request.source().query(QueryBuilders.matchAllQuery());SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits().getHits()) {String source = hit.getSourceAsString();System.out.println(source);}}/*** 准确查询* @throws IOException*/@Testpublic void matchQuery() throws IOException {SearchRequest request = new SearchRequest("hotel");request.source().query(QueryBuilders.termQuery("price","189"));SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits().getHits()) {String sourceAsString = hit.getSourceAsString();System.out.println(sourceAsString);}}/*** 布尔查询方式* 查询名字叫做如家* 价格200* 地址在上海*/@Testpublic void boolQuery() throws IOException {SearchRequest request = new SearchRequest("hotel");BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();boolQuery.mustNot(QueryBuilders.rangeQuery("price").gte("400"));boolQuery.must(QueryBuilders.matchQuery("city","上海"));boolQuery.must(QueryBuilders.matchQuery("name","如家"));request.source().query(boolQuery);for (SearchHit hit : client.search(request, RequestOptions.DEFAULT).getHits().getHits()) {String sourceAsString = hit.getSourceAsString();System.out.println(sourceAsString);}}/*** bool查询方式* @throws IOException*/@Testpublic void testBoole() throws IOException {SearchRequest request = new SearchRequest("hotel");BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();boolQuery.must(QueryBuilders.matchQuery("name","如家"));request.source().query(boolQuery);for (SearchHit hit : client.search(request, RequestOptions.DEFAULT).getHits()) {System.out.println(hit.getSourceAsString());}}/*** 根据经纬度查询方式* @throws IOException*/@Testpublic void geoPoint() throws IOException {SearchRequest request = new SearchRequest("hotel");request.source().sort(SortBuilders.geoDistanceSort("lonAndLat",new GeoPoint("31.2,121.5")).order(SortOrder.ASC).unit(DistanceUnit.KILOMETERS));SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits().getHits()) {TbHotel tbHotel = JSON.parseObject(hit.getSourceAsString(), TbHotel.class);System.out.println(tbHotel.getLonAndLat());}}@Testpublic void testMat() throws IOException {SearchRequest request = new SearchRequest("hotel");request.source().query(QueryBuilders.matchQuery("name","如家"));SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits().getHits()) {System.out.println(hit.getSourceAsString());}}
}
2. es查询语法
代码如下(示例):
//添加索引
PUT /tiantian
{"mappings": {"properties": {"name":{"type": "text", "analyzer": "ik_smart"},"age":{"type": "integer", "index": false}}}
}//查询索引
GET /tiantian//查询文档信息
GET /tiantian/_doc/1//添加字段信息
PUT /tiantian/_mapping
{"properties":{"address":{"type":"text","index":false}}
}//添加数据文档数据信息
POST /tiantian/_doc/1
{"address":"巴黎","name":"太牛龙","age":123
}//查询经纬度
GET /hotel/_search
{"query": {"match_all": {}},"sort": [{"price": {"order": "desc"}},{"_geo_distance": {"lonAndLat": {"lat": 31.2,"lon": 121.5},"order": "asc"}}]
}POST /hotel/_update/1902197537
{"doc": {"isAD": true}
}
POST /hotel/_update/2056126831
{"doc": {"isAD": true}
}
POST /hotel/_update/1989806195
{"doc": {"isAD": true}
}
POST /hotel/_update/2056105938
{"doc": {"isAD": true}
}GET /hotel/_search
{"query": {"function_score": {"query": {"match": {"name": "外滩"}},"functions": [{"filter": { "term": {"id": "1"}},"weight": 10}],"boost_mode": "multiply"}},"from": 1,"size": 10
}GET /hotel/_search
{"query": {"function_score": {"query": {"match": {"name": "如家"}},"functions": [{"filter": {"term": {"name": "339952837"}}, "weight": 10}],"boost_mode": "sum"}}
}GET /hotel/_search
{"query": {"match_all": {}}
}GET /hotelGET /hotel/_search
{"size": 0, "aggs": {"brandAgg": {"terms": {"field": "brand.keyword"}}}}GET /hotel/_search
{"query": {"match": {"name": "东方明珠"}}
}
三,api功能
@Overridepublic PageResult search(RequestParams params) throws IOException {//1.准备发送SearchRequest request = new SearchRequest("hotel");//2.准备布尔条件BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();//3.判断是否存在String key = params.getKey();if (key==null || "".equals(key)){boolQuery.must(QueryBuilders.matchAllQuery());}else {boolQuery.must(QueryBuilders.matchQuery("name",key));}Integer size = params.getSize();Integer page = params.getPage();request.source().from((page - 1) * size).size(size);request.source().query(boolQuery);String location = params.getLocation();//得出具体路径if (location!=null && !location.equals("")){request.source().sort(SortBuilders.geoDistanceSort("lonAndLat",new GeoPoint(location)).order(SortOrder.ASC).unit(DistanceUnit.KILOMETERS));}//相关性算法FunctionScoreQueryBuilder scoreQuery = QueryBuilders.functionScoreQuery(boolQuery,new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.termQuery("isAD", true),ScoreFunctionBuilders.weightFactorFunction(10))});request.source().query(scoreQuery);SearchResponse response = client.search(request, RequestOptions.DEFAULT);return handleResponse(response);}
根据经纬度查询方式

//得出具体路径if (location!=null && !location.equals("")){request.source().sort(SortBuilders.geoDistanceSort("lonAndLat",new GeoPoint(location)).order(SortOrder.ASC).unit(DistanceUnit.KILOMETERS));}
相关性算法

//相关性算法FunctionScoreQueryBuilder scoreQuery = QueryBuilders.functionScoreQuery(boolQuery,new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.termQuery("isAD", true),ScoreFunctionBuilders.weightFactorFunction(10))});
总结
- es高效,速度快,基于lu的内存数据库,采用倒序索引的方式,倒叙索引好处,我们之前数据库根据id找到值,倒排索引的方式,es默认创建索引,根据值找到,对应的文档列表,文档列表根据二分查找方式,找到对应的值
- es强大的api功能普通基于内存的数据库的方式,比如redis功能,适合做缓存,没有强大的api,不能做复杂的功能,es有强大api,分页,查询,联合查询,经纬度查询,相关性质查询方式
相关文章:
es的优势
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...
sonar对webgoat进行静态扫描
安装sonar并配置 docker安装sonarqube,sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com) 对webgoat进行sonar扫描 扫描结果 bugs Change this condition so that it does not always evaluate to "false" 意思是这里的else if语句不会执行…...
opencv-重点知识
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了大量用于图像处理和计算机视觉任务的工具和算法。以下是一些OpenCV中的重点知识: 图像加载与显示: 使用cv2.imread()加载图像。使用cv2.imshow()显示…...
上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹,黄白二线有所分化,题材热点轮动表现。北证50指数大涨超3%&#…...
2.4G无线收发芯片 XL2400P使用手册
XL2400P 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射 频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK 的通信模 式。发射输出功率、工作频道以及通信数据率均可配置。芯片已将多颗外…...
ZC序列理论学习及仿真
文章目录 前言一、ZC 序列理论1、基本概念2、表达式3、ZC 序列一些定义①、自相关②、循环移位③、循环自相关④、循环互相关二、ZC 序列性质1、性质 1:恒包络,即等模2、性质 2:零循环自相关3、性质 3:固定循环互相关4、其他性质①、傅里叶变换后仍是 ZC 序列②、低峰均比③…...
利用OpenCV实现图片中导线的识别
下面是一个需求,识别图片中的导线,要在图像中检测导线,我们需要采用不同于直线检测的方法。由于OpenCV没有直接的曲线检测函数,如同它对直线提供的HoughLines或HoughLinesP,检测曲线通常需要更多的图像处理步骤和算法&…...
关于VITS和微软语音合成的效果展示(仙王的日常生活第1-2209章)
目录 说明微软VITS 合成效果展示 说明 自己尝试了VITS和微软这两个语音合成功能。甚至使用了微软的效果来训练VITS,出乎意料,效果居然不错,没有大佐的口音。 微软 微软中最好听的,感情最顺滑的,应该是“云希”莫属。…...
普乐蛙VR航天航空巡展项目来到了第七站——绵阳科博会
Hi~ 你有一份邀约请查收 11月22日—26日绵阳科博会 普乐蛙展位号:B馆科技体验区(1) 邀你体验趣味VR科普,探索科技新发展 第十一届中国(绵阳)科技城国际科技博览会 绵阳科博会自2013年创办以来,已连续成功举办十届,已有近7000家单位…...
行情分析——加密货币市场大盘走势(11.22)
大饼昨日晚上打了止损,笔者入场了空单,目前来看上涨乏力,下跌是必然的,昨日的下跌跌破了蓝色上涨趋势线,而今日白天开始反弹,别着急抄底,下跌还没有结束。 空单策略:入场36500 止盈…...
QT--MP3项目数据库数据表设计与实现_歌曲搜索
QSqlQuery类:...
gzip 压缩优化大 XML 响应的处理方法
当处理大型XML响应时,我们经常会面临内存限制和性能问题。 在处理这个问题时,我们可以使用Python的requests库和lxml库来解决。下面是解决方案的步骤: 1. 使用requests库发送HTTP请求获取XML响应。 2. 检查响应的Content-Encoding标头&…...
数字化文旅系统,让景区营销变得更加简单!
随着互联网的普及和信息技术的不断发展,越来越多的消费者开始通过互联网来获取旅游信息、预订旅游产品和服务。因此,文旅行业需要紧跟时代步伐,借助数字化技术来提高服务质量和效率,满足消费者对于便捷、个性化的需求。 1. 强大功…...
配置命令别名
vim ~/.bashrc 配置命令别名 alias knkubectl -n alias kkubectl 配置golang环境变量 export GOPATH/root/go export GO111MODULEon export GOPROXY"http://mirros.yun.ali.com.cn:8848/goproxy" export GOROOT/usr/local/go export PATH$PATH:$GOPATH/bi…...
zookeeper应用之分布式队列
队列这种数据结构都不陌生,特点就是先进先出。有很多常用的消息中间件可以有现成的该部分功能,这里使用zookeeper基于发布订阅模式来实现分布式队列。对应的会有一个生产者和一个消费者。 这里理论上还是使用顺序节点。生产者不断产生新的顺序子节点&am…...
取数游戏2(动态规划java)
取数游戏2 题目描述 给定两个长度为n的整数列A和B,每次你可以从A数列的左端或右端取走一个数。假设第i次取走的数为ax,则第i次取走的数的价值vibi⋅ax,现在希望你求出∑vi的最大值。 输入格式 第一行一个数T ,表示有T 组数据。…...
Spring Boot中配置文件生效位置
1. 配置文件位置 首先小伙伴们要明白,Spring Boot 默认加载的配置文件是 application.properties 或者 application.yaml,properties优先级高于yaml。默认的加载位置一共有五个,五个位置可以分为两类: 从 classpath 下加载&…...
AIGC创作系统ChatGPT网站系统源码,支持最新GPT-4-Turbo模型
一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...
【JavaEE】操作系统与进程
作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…...
【MATLAB源码-第86期】基于matlab的QC-LDPC码性能仿真,输出误码率曲线。
操作环境: MATLAB 2022a 1、算法描述 QC-LDPC(准循环低密度奇偶校验)编码是一种高效的错误校正编码方式,广泛应用于通信系统和数据存储中以提高数据的可靠性。它是低密度奇偶校验(LDPC)编码的一种特殊形…...
Ollama与MCP协议集成:为本地大模型赋予工具调用能力
1. 项目概述:当Ollama遇上MCP,本地AI的“手”与“脑”终于相连 如果你和我一样,是个喜欢在本地折腾大模型的开发者,那你对Ollama一定不陌生。它就像一个超级好用的“模型管理器”,让你能一键拉取、运行各种开源大语言…...
Python表白程序实战:用Turtle库画动态爱心与小人(含源码可修改)
Python表白程序实战:用Turtle库打造个性化动态爱心与互动小人 在数字化表达情感的时代,用代码创作一份独特的礼物正成为技术爱好者的浪漫选择。Python的Turtle图形库以其直观的可视化效果和低门槛特性,成为制作动态表白程序的理想工具。不同于…...
Flutter脚手架flutterclaw:工程化开发的最佳实践与核心模块解析
1. 项目概述:一个Flutter开发者的“工具箱”与“脚手架”如果你在GitHub上搜索过Flutter相关的项目,或者在一个Flutter开发者社群里待过一阵子,你大概率会看到过flutterclaw/flutterclaw这个名字。乍一看,它像是一个个人或团队的G…...
【深度解析】Google AI Studio Vibe Coding 更新:从 Prompt 生成到可视化应用构建闭环
摘要 Google AI Studio 的 Vibe Coding 正从“输入提示词生成 Demo”演进为“可视化应用构建器”。本文解析 Prompt 自动补全、设计预览、编辑模式与内联素材生成的技术价值,并给出可落地的 AI Prompt 编排实战方案。背景介绍:Vibe Coding 正在从文本驱动…...
游戏模组加载器终极指南:3步搞定ASI插件安装与管理
游戏模组加载器终极指南:3步搞定ASI插件安装与管理 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-Loader …...
CVPR 2024投稿避坑指南:从LaTeX模板配置到OpenReview提交的完整流程
CVPR 2024投稿全流程实战手册:从模板配置到系统提交的23个关键细节 第一次向CVPR投稿的研究生小张,在截止前48小时发现参考文献格式全部错误,匿名化处理漏掉了3处作者信息,OpenReview提交页面卡在"Conflict Declaration"…...
别再自己编译zlib了!Qt自带zlib库的完整使用教程(附解压zip代码)
Qt开发者必知:无需编译直接调用内置zlib的完整实践指南 每次接手需要处理压缩文件的项目时,那种"又要折腾zlib编译"的恐惧感就会涌上心头。作为经历过无数次zlib编译失败的Qt开发者,我完全理解这种痛苦——直到发现Qt安装目录下那个…...
GetQzonehistory:5步永久备份你的QQ空间青春回忆,告别数据丢失焦虑
GetQzonehistory:5步永久备份你的QQ空间青春回忆,告别数据丢失焦虑 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否也曾担心,那些记录着青春岁…...
JAVA自营商城小程序APP商城源码单商户源码的uniapp代码片段
以下为JAVA自营商城小程序/APP单商户源码的Uniapp核心功能代码片段,包含商品展示、购物车管理、订单支付等模块:1. 商品列表页(pages/product/list.vue)vue<template><view class"container"><!-- 搜索栏…...
轻量化GraphRAG实践:用知识图谱提升大模型问答精度
1. 项目概述:当大模型遇上知识图谱,Nano-GraphRAG的轻量化实践最近在折腾大模型应用时,发现一个挺普遍的问题:当你把一份几十页的PDF或者一个复杂的项目文档丢给大模型,让它回答一些需要综合上下文才能搞定的问题时&am…...
