一、基本概念及缘由

1.Sql vs nosql

SQL:Structured Query Language

Nosql:Not only SQL

Relationship DB

Relations:One-to-one relation、One-to-many、Many-to-many、Self-reference

Mongo DB(humongous 大量的)、Redis  .ect (内存型数据库)

Structure:Database Collencitons Documents

2.为何使用搜索引擎

项目中的搜索功能,如果数据量较小,那么可以直接使用mysql进行搜索;当数据量到达一定规模后,比如十亿、百亿,这时传统的关系型数据库就已经达到性能瓶颈,不适合这个项目,此时可以使用搜索引擎ElasticSearch。可能你会问,为什么不用内存型数据库。虽然内存型数据库读写性能很高,但是将庞大的数据量全都装进内存中不太现实。比如,使用PB级别的数据,每个内存节点96G的话,那么需要上万个节点,再考虑到数据的备份,那么会更多。这么高的成本,不现实。软件是服务于企业的,企业的目的是盈利。

3.初步认识ElasticSearch

目前常见的搜索引擎的首选,就是开源的ElasticSearch。它可以快速存储、搜索和分析海量数据。它的底层是开源库Lucene(Lucene必须手动去写接口进行调用)。Elastic对Lucene进行了封装,提供了基于Rest API的接口,可以直接操作接口。

(official document path :  https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)

学习环境:elasticsearch-7.5.2  windows 10

3.1 基本概念

Node、Cluster

ElasticSearch的本质是分布式数据库,因此就会有节点(Node),一个节点相当于一个实例,一组节点构成集群(cluster)。

IndexES会给所有存储的数据建立索引,经过处理后会有个反向索引。查找数据时直接查找该索引。

※Document※

插入ES中的每条记录都是一个Document。它也是使用JSON格式,多个Document构成了一个Index。

※Type※

分组的类型。

e.g. curl -X PUT "localhost:9200/customer/_doc/3?pretty" -H "Content-Type: application/json" -d "{\"name\": \"John Lee3\"}"

customer 是Index的名字。_doc是type名字。3表示该条记录的ID,它不一定是数字,任意字符串(如:“adc”)都可以。添加数据时,也可以不指定ID,这时,会自动添加一个随机字符串的ID。pretty表示易读的格式返回。

3.2 Get Started
(1)install path https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html
(2)Run bin/elasticsearch (or bin\elasticsearch.bat on Windows)
(3)Run curl http://localhost:9200/

3.3 memo

我照着官网学习时,用到的命令,复制下来备用。下面命令我亲自执行过,没有问题。

curl -X GET "localhost:9200/_cat/health?v&pretty"
curl -X PUT "localhost:9200/customer/_doc/3?pretty" -H "Content-Type: application/json" -d "{\"name\": \"John Lee3\"}"
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@accounts.json"
curl -X GET "localhost:9200/customer/_doc/1?pretty"
curl "localhost:9200/_cat/indices?v"
curl -X GET "localhost:9200/bank/_search?pretty" -H "Content-Type: application/json" -d "{\"query\": { \"match_all\": {} },\"sort\": [{ \"account_number\": \"asc\" }]}"
curl -X GET "localhost:9200/bank/_search?pretty" -H "Content-Type: application/json" -d"
{
  \"query\": { \"match_all\": {} },
  \"sort\": [
    { \"account_number\": \"asc\" }
  ],
  \"from\": 10,
  \"size\": 10
}"
curl -X GET "localhost:9200/bank/_search?pretty" -H "Content-Type: application/json" -d"{  \"query\": { \"match\": { \"address\": \"mill lane\" } }}"

4.踩坑

1.使用curl命令时,注意事项。(环境:windows环境,在cmd.exe下执行的curl命令)

一定要注意双引号以及转义字符。切记。按照官网复制来的命令,会有问题。

curl -H "Content-Type: application/json" -X POST -d "{\"abc\":123}" "https://httpbin.org/post"

参考文档:

https://blog.csdn.net/aisemi/article/details/80212836

https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-intro.html      Elasticsearch official guides

http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html

Elastic Search 学习之路(一)的更多相关文章

  1. Elastic Search 学习之路(三)—— tutorial demo

    一.ElasticSearch tutorial demo example 1. 单机.local.CRUD操作 实现方式: SpringBoot + ElasticSearch 拷贝的小demo,原 ...

  2. Elastic Search 学习之路(二)——inverted index(反向索引)

    这是篇翻译文,图画的挺有意思. Elastic使用非常特殊的数据结构,称作反向索引.反向索引中,包括了一组document中出现的唯一的单词,和对应的单词,所出现的位置.反向索引是在ES中,docum ...

  3. elastic search 学习笔记

    Elastic search在数据分析的应用中相当于一个数据库的搜索引擎. 跟MySQL类似,它有自己的查询语言,只不过不是关系型数据库,属于NoSQL. 可以根据索引从分布式服务器文件系统中快速存取 ...

  4. elastic search 学习 一

    初步阅读了elastic search 的文档,并使用command实践操作. 大概明白其概念模型.

  5. elastic search&logstash&kibana 学习历程(一)es基础环境的搭建

    elastic search 6.1.x 常用框架: 1.Lucene Apache下面的一个开源项目,高性能的.可扩展的工具库,提供搜索的基本架构: 如果开发人员需用使用的话,需用自己进行开发,成本 ...

  6. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  7. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 10)

    12天学好C语言--记录我的C语言学习之路 Day 10: 接着昨天的指针部分学习,有这么一个题目: //还是四个学生,四门成绩,只要有学生一门功课没及格就输出这个学生的所有成绩 /*//progra ...

  9. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

随机推荐

  1. MySQL数据库 | MySQL调优|MySQL底层原理|MySQL零基础新手教程

    MySQL数据库安装 一.Windows 环境下安装 A.下载 MySQL Select Operating System: Microsoft Windows 快捷下载:mysql-8.0.22-w ...

  2. 深度分析:面试90%被问到的 Session、Cookie、Token,看完这篇你就掌握了!

    Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie 的主要目的 ...

  3. FL Studio进行侧链编辑的三种方式

    侧链是一种信号处理技术,通过它我们可以使用一个信号波形的振幅(音量)来控制另一个信号的某些参数.在电子音乐中,例如trance,house和techno,我们通常会用kick(底鼓)和bass进行演奏 ...

  4. 【ES6】ES6入门笔记

    1.概要 - ECMAScript2015(ES6)是Javascript最标准的语法式样,是在2015年6月由Ecma国籍组织公布的最新版本,现在已经被多个领域和浏览器所广泛采纳和使用. 2.学习网 ...

  5. symfony中,使用原声的sql语句

    1 /** 2 * 数组形式的原生sql 3 */ 4 public function arrayA(array $did) 5 { 6 $statement = $this->getEntit ...

  6. Spring 对Apache Kafka的支持与集成

    1. 引言 Apache Kafka 是一个分布式的.容错的流处理系统.在本文中,我们将介绍Spring对Apache Kafka的支持,以及原生Kafka Java客户端Api 所提供的抽象级别. ...

  7. sentinel--初级使用篇

    1.官方资料 github官网地址:https://github.com/alibaba/Sentinel wiki:https://github.com/alibaba/Sentinel/wiki/ ...

  8. C构造类型 数组

    一.数组是什么 一组有个固定大小.相同数据类型的数据的集合. 数组可以分为:一维数组.二维数组.三维数组....(维数不止一维:多维数组) 表格 : 行和列(二维数组) 二.一维数组 1.一般形式 类 ...

  9. DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升

    CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...

  10. Spring Cloud 学习 (五) Zuul

    Zuul 作为路由网关组件,在微服务架构中有着非常重要的作用,主要体现在以下 6 个方面: Zuul, Ribbon 以及 Eureka 相结合,可以实现智能路由和负载均衡的功能,Zuul 能够将请求 ...