Elasticsearch

打印 上一主题 下一主题

主题 1869|帖子 1869|积分 5607

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Elasticsearch

ES 概述

Elasticsearch,简称为 ES,是一款非常强盛的开源的高扩展的分布式全文 检索引擎,可以帮助我们从海量数据中快速找到必要的内容,它可以近乎实时的 存储、检索数据.还可以可以实现日志统计、分析、系统监控等功能. 官网:https://www.elastic.co/cn 比方京东,淘宝,头条等站内搜索功能
mysql搜索匹配机制性能低,数目大的环境下影响性能 采用正向索引 从第一条开始匹配查询效率低 不能分词
可以将一些搜索数据比方消息标题,商品名称等信息存入到ES中,然后用户搜索时,不从mysql查询,从ES中进行搜索,在通过信息id,直接到mysql中进行数据查询完整的信息
ES 环境搭建

安装 ES

ES 下载地点: https://www.elastic.co/cn/downloads/elasticsearch 默认打开是最新版本
解压 在 bin 目次中 双击启动 elasticsearch.b
访问 http://127.0.0.1:920
安装数据可视化界面 elasticsearch head

就是一个前端项目,可以可视化查看ES中的数据
前提必要安装 nodejs github
下载: https://github.com/mobz/elasticsearch-head/
github 加速器: https://github.ur1.fun/
解压
从界面访问 9200 服务会出现跨域问题 在 config 目次中的 elasticsearch.yml 文件中设置 # 开启跨域 http.cors.enabled: true # 所有人访问 http.cors.allow-origin: “*” 命令行进入目次
npm install npm run start
访问:http://127.0.0.1:9100/
安装可视化 kibana 组件

Kibana 是一个针对 Elasticsearch 的开源分析及可视化平台,用来搜索、查看交互 存储在 Elasticsearch 索引中的数据。 使用 Kibana,可以通过各种图表进行高级数据分析及展示。Kibana 让海量数据更 容易理解。
下载版本要和 ES 版本一致 下载地点: https://www.elastic.co/cn/downloads/kibana 默认打开是最新版本
7.6.1 下载版 https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-windows-x86_64.zip
汉化 kibana
修改 config 目次下的 kibana.yml 文件 i18n.locale: “zh-CN” 双击 bin 目次下的 kibana.bat 启动
安装ik分词器

7.6.1 版下载 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch- analysis-ik-7.6.1.zip 解压,在elasticsearch-7.6.1\plugins目次下创建名称为ik的文件夹,将解压后的文件复 制到 ik 目次. 自定义 ik 分词器(非必要,可以根据实际环境选择设置)
在 elasticsearch-7.6.1\plugins\ik\config 添加 xxx.dic 文件 定义词组, .dic 文件必须是 utf-8 编码格式,否则启动报错 在 IKAnalyzer.cfg.xml 文件添加自定义分词器文件
ES中基本概念

索引:同一范例的文档集合 类似mysql中的表
文档:一条数据就是一个文档 类似mysql中的一行数据
字段:属性 类似mysql中的列名
映射:定义索引时给定的约束.
mysql:擅长事件型操作,可以确保数据的安全和一致性
ES:擅长海量数据的搜索,分析,盘算
ES索引库基本操作

创建索引库
创建索引库 mapping 属性 mapping 是对索引库中文档的约束,常见的 mapping 属性包括: type:字段数据范例,常见的简单范例有: 字符串:text(可分词的文本),keyword(精确值,比方:品牌,国家,邮箱) 数值:long、integer、short、byte、double、float、 布尔:boolean 日期:date 对象:object
index:是否创建索引参与搜索,默认为 true,如果不必要参与搜索设置为 false analyzer:使用哪种分词器
  1. PUT /news
  2. {
  3.   "mappings": {
  4.     "properties": {
  5.       "id":{
  6.         "type": "integer",
  7.         "index": false
  8.       },
  9.       "title":{
  10.         "type": "text",
  11.         "analyzer": "ik_max_word"
  12.       },
  13.       "img":{
  14.         "type": "keyword",
  15.         "index": false
  16.       }
  17.     }
  18.   }
  19. }
复制代码
查询索引库
  1. GET /news
  2. 语法: GET /索引库名
  3. 实例: GET /new
复制代码
删除索引库
  1. DELETE /news
  2. 语法: DELETE /索引库名
  3. 实例: DELETE /news
复制代码
修改索引库
  1. PUT /news/_mapping
  2. {
  3.   "properties":{
  4.     "count":{
  5.       "type":"long",
  6.       "index":false
  7.     }
  8.   }
  9. }
复制代码
ES 文档操作

新增文档
  1. 语法:
  2. POST /索引库名/_doc/文档 id
  3. {
  4. “字段名 1”:”值 1”
  5. “字段名 2”:”值 2”
  6. .....
  7. }
复制代码
查询文档
  1. 语法:
  2. GET /索引库名/_doc/文档 id
复制代码
删除文档
  1. 语法:
  2. DELETE /索引库名/_doc/文档 id
复制代码
修改文档
  1. POST /索引库名/_update/文档 id
  2. {
  3. "doc":{
  4. "要修改的字段":"新值"
  5.         }
  6. }
复制代码
搜索文档
  1. GET /news/_search
  2. {
  3. "query":{
  4.         "match":{
  5.         "title":"美国"
  6.                 }
  7.         }
  8. }
复制代码
SpringBoot 集成 ES

指定版本,版本必须与安装的 ES 版本
  1. <!--指定 jdk 和ES 版本-->
  2. <properties>
  3.     <java.version>1.8</java.version>
  4.     <elasticsearch.version>7.6.1</elasticsearch.version>
  5. </properties>
复制代码
添加依赖
  1. <!--ES client依赖-->
  2. <dependency>
  3.     <groupId>org.elasticsearch.client</groupId>
  4.     <artifactId>elasticsearch-rest-high-level-client</artifactId>
  5. </dependency>
复制代码
添加初始化 RestHighLevelClient 的设置类
  1. @Configuration
  2. public class ElasticSearchConfig {
  3.     @Bean
  4.     public RestHighLevelClient restHighLevelClient(){
  5.         RestHighLevelClient client = new RestHighLevelClient(
  6.                 RestClient.builder(
  7.                         new HttpHost("localhost", 9200, "http")));
  8.         return client;
  9.     }
  10. }
复制代码
索引库操作

创建索引库
  1. CreateIndexRequest request = new CreateIndexRequest("users");
  2. CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT)
复制代码
判断索引库是否存在
  1. GetIndexRequest request = new GetIndexRequest("users");
  2. boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
复制代码
删除索引库
  1. DeleteIndexRequest indexRequest = new DeleteIndexRequest("users");
  2. AcknowledgedResponse delete = restHighLevelClient.indices().delete(indexRequest, RequestOptions.DEFAULT);
  3. delete.isAcknowledged();//返回 true 删除成功,返回 false 删除失败
复制代码
文档操作

添加文档
  1. //将新闻添加到 mysql 的同时,将数据同步更新到 ES,为搜索提供数据
  2. News news = new News();
  3. news.setId(3);
  4. news.setTitle("美国今年要总统选择,拜登着急了");
  5. news.setImg("aaaaasssss.jpg");
  6. IndexRequest indexRequest = new IndexRequest("news").id(news.getId().toString());
  7. //将对象转为 json 存进 ES
  8. indexRequest.source(new ObjectMapper().writeValueAsString(news),XContentType.JSON);
  9. restHighLevelClient.index(indexRequest,RequestOptions.DEFAULT);
复制代码
修改文档
  1. News news = new News();
  2. news.setId(3);
  3. news.setTitle("中国航母开往美国,准备开战,拜登着急了");
  4. news.setImg("dddddddddddd.jpg");
  5. UpdateRequest updateRequest = new UpdateRequest("news",news.getId().toString());
  6. updateRequest.doc(new ObjectMapper().writeValueAsString(news), XContentType.JSON);
  7. restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);
复制代码
查询文档
  1. GetRequest getRequest = new GetRequest("news","1");
  2. GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
  3. //获取查询的内容,返回 json 格式
  4. String json = getResponse.getSourceAsString();
  5. //使用 jackson 组件将 json 字符串解析为对象
  6. News news = new ObjectMapper().readValue(json, News.class);
复制代码
删除文档
  1. DeleteRequest deleteRequest = new DeleteRequest("news","1");
  2. DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
复制代码
搜索文档
  1. SearchRequest searchRequest = new SearchRequest("news");
  2. SearchRequest searchRequest = new SearchRequest("news");
  3. //精确条件查询
  4. searchRequest.source().query(QueryBuilders.termQuery("title","美国"));
  5. //发送查询请求
  6. SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  7. //接收查询结果
  8. SearchHits hits = search.getHits();
  9. //组装查询结果
  10. ArrayList<News> list = new ArrayList<>();
  11. //取出结果集
  12. for (SearchHit searchHit : hits.getHits()){
  13. String json = searchHit.getSourceAsString();
  14. News news = new ObjectMapper().readValue(json,News.class);
  15. list.add(news);
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表