目录

  • 1.Elasticsearch和elasticsearch-headr跨域问题
  • 2.Elasticsearch的插件ik分词器
  • 3.ElasticSearch的核心概念
    • 1.分片
    • 2.倒排索引(重点,数据库可能会问)
    • 3.基本Rest命令说明
  • 4.Spring boot集成ElasticSearch
  1. ES 基础一网打尽
    1.1 ES定义
    ES=elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
    Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
    1.2 Lucene与ES关系?
    1)Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
    2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

1.3 ES主要解决问题:
1)检索相关数据;
2)返回统计结果;
3)速度要快。
1.4 ELK是什么?
ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储以及全文检索
logstash: 日志加工、“搬运工”
kibana:数据可视化展示

1.Elasticsearch和elasticsearch-headr跨域问题

首先保证两者启动成功


然后需要在elasticsearch的config中找到elasticsearch的配置文件

添加两行配置,重启Elasticsearch即可。

ElasticSearch和Solr的比较总结

  • es基本是开箱即用(解压就可以使用) 非常简单 Solr安装略微复杂一丢丢
  • Solr利用Zookeeper进行分布式管理,而ElasticSearch 自身带有分布式协调管理功能
  • Solr支持更多格式的数据,比如JSON、XML、CSV,而ElasticSearch仅支持json文件格式
  • Solr光放提供的功能更多,而ElasticSearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
  • Solr 查询快,但更新索引慢(插入删除慢),用于电商等查询多的应用
    • ES建立索引快(查询慢),即实时性查询快,用于facebook、新浪等搜索
    • Solr是传统搜索应用的有力解决方案,但ElasticSearch更适用于新兴的实时搜索应用

2.Elasticsearch的插件ik分词器

引入ik插件后,如何自定义自己的字典(用来分隔词)

在ik的config创建一个后缀名为dic的文件,输入自己的分词。

将写好的分词字典引入IKAnalyzer.cfg.xml中

3.ElasticSearch的核心概念

  1. 索引
  2. 字段类型(mapping)
  3. 文档(documents)
  4. 分片(倒排索引)

对于初学者就可以把ElasticSearch看作为数据库

Relational DB ElasticSearch
数据库(database) 索引(indices)
表(tables)) types
行(row) documents
字段(columns) fields

1.分片

一个集群至少有一个节点,而一个节点就是一个elasricsearch进程,节点可以有多个索引默认的有个5个分片( primary shard ,又称主分片)构成的,每一个主分片会有一个副本( replica shard ,又称复制分片)

上图是一个有3个节点的集群,可以看到主分片和对应的复制分片都不会在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失。实际上,一个分片是一个Lucene索引,一个包含倒排索引的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字

2.倒排索引(重点,数据库可能会问)

elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索作为底层,一个elasticsearch索引是由多个Lucene索引组成的。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。
倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。将文档分解为单个词 根据词的出现的权重,返回相应的文档。

3.基本Rest命令说明

特别注意keyword类型。是指不可分割类型,不会被分词器解析。还有一些分页查询,布尔值查询,过滤器,精确查询,多个值匹配的精确查询,高亮查询。

4.Spring boot集成ElasticSearch

引入依赖
版本号一定要和你下载的Elasticsearch版本号一致

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.6.2</version>
</dependency>

根据官方文档创建配置类

package com.yue.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
public class ElasticSearchClientConfig {@Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));return client;}}

测试所需要的方法,例如 crud,批处理等

@SpringBootTest
class YueEsApiApplicationTests {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;@Testvoid contextLoads() {}//测试索引的创建 Request PUT kuang_index@Testvoid testCreateIndex() throws IOException {//1. 创建索引请求CreateIndexRequest request = new CreateIndexRequest("yue_index");//2. 客户端执行创建请求 IndicesClient 请求后获得响应CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);System.out.println(createIndexResponse);}//测试获取索引 判断其是否存在@Testvoid testExists() throws IOException {GetIndexRequest request = new GetIndexRequest("yue_index");boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists);}//测试删除索引@Testvoid testDeleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("yue_index");//删除AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);System.out.println(delete.isAcknowledged());}//测试添加文档@Testvoid testAddDocument() throws IOException {//创建对象User user = new User("aa", 3);//创建请求IndexRequest request = new IndexRequest("yue_index");//规则 put /kuang_index/_doc/1request.id("1");request.timeout(TimeValue.timeValueSeconds(1));request.timeout("1s");//将我们的数据放入请求 jsonrequest.source(JSON.toJSONString(user), XContentType.JSON);//客户端发送请求,获取响应的结果IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);System.out.println(indexResponse.toString());//对应我们命令返回的状态 CREATEDSystem.out.println(indexResponse.status());}//获取文档,判断是否存在@Testvoid testIsExists() throws IOException {GetRequest request = new GetRequest("yue_index", "1");//不获取返回的 _source 的上下文了request.fetchSourceContext(new FetchSourceContext(false));request.storedFields("_none_");boolean exists = client.exists(request, RequestOptions.DEFAULT);System.out.println(exists);}//获得文档的信息@Testvoid testGetDocument() throws IOException {GetRequest request = new GetRequest("yue_index", "1");GetResponse response = client.get(request, RequestOptions.DEFAULT);//打印文档的内容System.out.println(response.getSourceAsString());//返回的全部内容和命令是一样的System.out.println(response);}//更新文档的信息@Testvoid testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("yue_index", "1");request.timeout("1s");User user = new User("狂神说Java", 18);request.doc(JSON.toJSONString(user), XContentType.JSON);UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);System.out.println(updateResponse.status());}//删除文档的记录@Testvoid testdeleteDocument() throws IOException {DeleteRequest request = new DeleteRequest("yue_index", "1");request.timeout("1s");DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());}//特殊的,真实项目一般都会批量插入数据@Testvoid testBulkRequest() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");List<User> list = new ArrayList<>();list.add(new User("k1", 3));list.add(new User("k2", 3));list.add(new User("k3", 3));list.add(new User("g1", 3));list.add(new User("g2", 3));list.add(new User("g3", 3));//批处理请求for (int i = 0; i < list.size(); i++) {// 批量更新和批量删除,就在这里修改对应请求就可以了bulkRequest.add(new IndexRequest("yue_index").id("" + (i + 1)).source(JSON.toJSONString(list.get(i)), XContentType.JSON));}BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);//是否失败 ,返回 false 表示成功System.out.println(bulkResponse.hasFailures());}//查询//SearchRequest 搜索请求//SearchSourceBuilder 条件构造//HighlightBuilder 构建高亮//TermQueryBuilder 精确查询//MatchAllQueryBuilder//xxx QueryBuilder 对应我们刚才看到的命令@Testvoid testSearch() throws IOException {SearchRequest searchRequest = new SearchRequest("yue_index");//构建搜索的条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//查询条件,我们可以使用QueryBuilders工具类来实现//QueryBuilders.termQuery 精确//QueryBuilders.matchAllQuery() 匹配所有TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "q1");
//        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();sourceBuilder.query(termQueryBuilder);sourceBuilder.from();sourceBuilder.size();sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(searchResponse.getHits()));System.out.println("===================");for (SearchHit searchHit : searchResponse.getHits().getHits()) {System.out.println(searchHit.getSourceAsMap());}}
}

本博客学自狂神说

Elasticsearch学习心得及常见问题相关推荐

  1. tableau显示正在将数据发送到服务器,BI软件之Tableau学习心得之三——常见问题总结...

    废话不多说,直接上干货. 1. 设置数据格式 选中要设置的数据字段,选择设置格式,例如我想设置总计(折扣)保留两位小数, 在"区"中的数字框中设置就可以了. 但有时候如果我们用的是 ...

  2. 上网课的心得体会1000字_网络学习心得体会 (1000字)

    网络学习心得体会 陈勇 网络教育学习的心得体会 当今的社会是信息的社会, 世界开始全面信息化. 全球化. 为了紧跟时代的脉搏,参加工作多年来,一直没有停止过学习,钻研业务知识,提升业务能 力网络教育的 ...

  3. 医用计算机基础学习心得,计算机基础学习心得.doc

    计算机基础学习心得 计算机基础学习心得一:计算机基础学习心得 当今社会,到处充满机会与挑战.知识是我们面对这一切的筹码,而计算机知识则更为重要.如何在本科函授这样一种形式下,学好计算机课程,这是摆在我 ...

  4. 电脑硬件知识学习_关于网络学习心得体会集锦七篇

    关于网络学习心得体会集锦七篇 当在某些事情上我们有很深的体会时,好好地写一份心得体会,通过写心得体会,可使我们今后少走弯路.那么心得体会怎么写才能感染读者呢?以下是小编为大家收集的网络学习心得体会7篇 ...

  5. 学计算机这么课最大的收获是啥,计算机课程学习心得范文

    计算机网络系统是一个集计算机硬件设备.通信设施.软件系统及数据处理能力为一体的,能够实现资源共享的现代化综合服务系统,计算机网络系统的组成可分为三个部分,即硬件系统,软件系统及网络信息系统.下面是学习 ...

  6. 学计算机的初衷,计算机学习心得体会5篇

    计算机学习心得体会5篇 从某件事情上得到收获以后,往往会写一篇心得体会,这样我们可以养成良好的总结方法.那么好的心得体会都具备一些什么特点呢?下面是小编精心整理的计算机学习心得体会5篇,仅供参考,希望 ...

  7. 计算机课范文,计算机课程学习心得范文

    计算机网络系统是一个集计算机硬件设备.通信设施.软件系统及数据处理能力为一体的,能够实现资源共享的现代化综合服务系统,计算机网络系统的组成可分为三个部分,即硬件系统,软件系统及网络信息系统.下面是学习 ...

  8. 计算机推演未来发展动象,大学生计算机基础学习心得五篇

    学习作为一种获取知识交流情感的方式,已经成为人们日常生活中不可缺少的一项重要内容,尤其是在二十一世纪这个知识经济时代,自主学习已是人们不断满足自身需要.以下是小编整理的大学生计算机基础学习心得,希望可 ...

  9. 【一周课表 · 中秋献礼9.2折】 第四期 认证考试、java、python、php、移动开发、系统运维、区块链 【分享学习心得得技术图书/定制T恤/购课券/会员券】)

    [一周课表]: [一周课表]是CSDN学院新推出的学习专栏节目,目的在于带领大家能够一起学习一些课程,认真学习的学员会收到CSDN学院发出的奖励小礼品:技术图书/CSDN学院定制T恤. 规则:在下方评 ...

最新文章

  1. html中h3的样式,比较好看的css自定义样式(标题 h1 h2 h3)
  2. 巧用css实现强制不换行、自动换行、强制换行(转)
  3. 人事管理系统 数据流图_中国移动集中化人力资源管理系统试点上线成功
  4. 教师节|祝所有可爱的讲师节日快乐!
  5. 使用yum命令安装服务时,一直卡在Loaded plugins: fastestmirror Determining fastest mirrors
  6. mysqlbinlog配置
  7. 如何用python写程序设置当前打印机为默认打印机,从Python打印到标准打印机?
  8. 详细解析单片机控制继电器原理图以及其作用
  9. NeoKylin(中标麒麟)6.5 更新yum源
  10. 什么是SRE?SRE需要具备什么能力?
  11. 用Python实现简易超市售货系统
  12. 越王勾践剑“千年不腐”传奇
  13. STM32------>第三天,spi补充,uart-dma,NB-loT介绍,At指令,串口透传
  14. iOS印象笔记添加到Siri捷径,怎么实现的?
  15. 10、Hibernate的对象检索策略
  16. 计划任务备份MSSQL_se7en3_新浪博客
  17. 小米跳智能家居大坑,丢芝麻捡西瓜值得吗?
  18. SystemVerilog: 打印显示之数据格式控制及特殊字符详解
  19. 重磅!谷歌宣布 DeepMind 与 Google Brain 合并,奋力追赶 OpenAI
  20. 使用pydicom和SimpleITK预处理dicom文件

热门文章

  1. 桃之夭夭 第一章 仰望
  2. 编程实现RSA数字签名
  3. linux戏说第一炮
  4. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(E-捡贝壳)
  5. 51单片机汇编语言实验(三)-----定时/计数器实验(附参考代码及注释)
  6. 瞎说springboot
  7. vivo Pad好不好 vivo Pad值不值得买
  8. 【神经网络】tenorflow实验11--人工神经网络(2)
  9. 华为鸿蒙系统小米,华为鸿蒙操作系统适配在小米的MIUI 11上?你们信吗?
  10. 淘宝API接口,获得淘宝app商品详情原数据(Onebound数据)