elasticsearch基础

什么是Elasticsearch?

Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。

Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确地形容:

  • 一个分布式的实时文档存储,每个字段可以被索引与搜索;
  • 一个分布式实时分析搜索引擎;
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。

一、安装

1、下载地址

elasticsearch下载地址:https://www.elastic.co/cn/downloads/elasticsearch

kibana下载地址

2、启动

elasticsearch-7.15.1\bin\elasticsearch.bat

注:需要jdk8环境

3、检查是否启动成功

http://localhost:9200/?pretty

{
  "name" : "DESKTOP-5M45G7D",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "YlJXQXUrS9WLtmBhRHN3hA",
  "version" : {
    "number" : "7.15.1",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "83c34f456ae29d60e94d886e455e6a3409bba9ed",
    "build_date" : "2021-10-07T21:56:19.031608185Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

注:name:node名称   

cluster_name:集群名称
version:版本相关信息

4、elasticsearch.yml

修改集群名称查找cluster.name

默认情况下,Elastic 只允许本机访问,如果需要远程访问,可以修改 Elastic 安装目录的config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0,然后重新启动 Elastic。

network.host: 0.0.0.0

上面代码中,设成0.0.0.0让任何人都可以访问。线上服务不要这样设置,要设成具体的 IP。

5、使用kibana的开发界面去操作elasticsearch

 启动kibana的方法:kibana-7.15.1-windows-x86_64\bin\kibana.bat

访问地址:http://localhost:5601/app/dev_tools#/console

二、基本概念

2.1 Node 与 Cluster

Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。

单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

2.2 Index

Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。

所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。

下面的命令可以查看当前节点的所有 Index。

​
GET /_cat/indices?v

2.3 Document

Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。

Document 使用 JSON 格式表示,下面是一个例子。

{
  "user": "张",
  "title": "工程师",
  "desc": "数据库"
}

同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

2.4 Type

Document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。

不同的 Type 应该有相似的结构(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如productslogs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

下面的命令可以列出每个 Index 所包含的 Type。

GET /_mapping?pretty=true

根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。

6、命令

  一个Elasticsearch请求和任何 HTTP 请求一样,都由若干相同的部件组成:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

返回的数据格式为JSON,因为Elasticsearch中的文档以JSON格式储存。其中,被 < > 标记的部件:

部件 说明
VERB 适当的 HTTP 方法谓词 : GETPOSTPUTHEAD 或者 DELETE
PROTOCOL http 或者 https(如果你在 Elasticsearch 前面有一个 https 代理)
HOST Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。
PORT 运行 Elasticsearch HTTP 服务的端口号,默认是 9200
PATH API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats_nodes/stats/jvm
QUERY_STRING 任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)
BODY 一个 JSON 格式的请求体 (如果请求需要的话)

对于HTTP方法,它们的具体作用为:

HTTP方法 说明
GET 获取请求对象的当前状态
POST 改变对象的当前状态
PUT 创建一个对象
DELETE 销毁对象
HEAD 请求获取对象的基础信息

(1)、检查是否健康 :GET /_cat/health

     green:活跃状态  

(2)、插入数据

首先创建index为test, 创建type为event, 插入id为1的第一条数据,只需运行下面命令就行:

PUT /test/event/1
{
  "host": "test",
  "title": "Elasticsearch",
  "description": "Elasticsearch",
  "attendees": ["Daveee"],
  "date": "2021-11-10",
  "reviews": 3
}

(3)、删除数据

DELETE /test/event/5  删除id为5的数据

如果想删除整个event类型,可输入命令:

DELETE /test/event


如果想删除整个test索引,可输入命令:

DELETE /test

(4)、修改数据

      修改数据的命令为POST

修改 id为1中的host字段

POST /test/event/1/_update
{
  "doc": {"host": "test"}
}

(5)、查询

查询数据的命令为GET,查询命令也是Elasticsearch最为重要的功能之一。比如我们想查询test中event里面id为1的数据,运行命令如下:

GET /test/event/1  

  如果想要搜索test中event里面所有的文档,运行命令如下:

GET /test/_search

当然,Elasticsearch 提供更加丰富灵活的查询语言叫做 查询表达式 , 它支持构建更加复杂和健壮的查询。利用查询表达式,我们可以检索出conference中event里面所有host为123的文档,命令如下:

match :只要含有其中一个词就可以   match_phrase:严格含有所有词

GET /test/event/_search
{
    "query" : {
        "match" : {
            "host" : "123"
        }
    }
}

Elastic 默认一次返回10条结果,可以通过size字段改变这个设置。

GET /test/event/_search
{
  "query" : { "match" : { "desc" : "管理" }},
  "size": 1
}

上面代码指定,每次只返回一条结果。

还可以通过from字段,指定位移。

GET /test/event/_search

{
  "query" : { "match" : { "desc" : "管理" }},
  "from": 1,
  "size": 1
}

上面代码指定,从位置1开始(默认是从位置0开始),只返回一条结果。

上一篇:Amazon Elasticsearch Service 正式更名,双方纠纷再次升级


下一篇:中间件目录索引:redis,git,grpc等