下载安装引用这篇文章
目录
- 1、ES基本知识
- 核心术语
- 核心概念
- 倒排索引
- ES字典树
- ES怎么保证读写一致
- 2、Window启动ES步骤
- elasticsearch-8.11.3
- elasticsearch-head-master
- kibana-8.11.3
- 3、Kibana 调用ES API示例
1、ES基本知识
核心术语
● 索引:index (相当于表)
● 类型:type (相当于表逻辑类型),早版本有类型
● 文档:document (相当于数据库表的行)
● 字段:fields(相当于数据库表列)
核心概念
● 映射:mapping (相当于表结构后定义)
● 近实时:NRT (Near real time)
● 节点:node (每一个服务器)
● shard replica (数据分片与备份)
倒排索引
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和包含该属性值的各个记录地址。由于不是根据记录来确定属性,而是根据属性来确定记录的位置,所以称之为倒排索引。倒排索引改会在存储数据时将关键词和数据进行关联,保存到倒排表中,然后查询是,将查询内容进行分词后在倒排中进行查询,最后匹配数据即可。
ES字典树
字典树又称单词查找树,Trie树,是一种树形结构,是一种哈系树的变种。典型应用于统计,排序和保存大量的字符串。
优点:利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
3个基本性质:
a. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
b. 从根节点到某一节点,路径上经过的字符串连接起来,为改节点对应的字符串
c. 每一个节点的所有子节点包含的字符串都不相同。
ES怎么保证读写一致
- 更新操作:可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖
每个文档都有一个_version 版本号,这个版本号在文档被改变时加一。Elasticsearch使用这个 _version 保证所有修改都被正确排序,当一个旧版本出现在新版本之后,它会被简单的忽略。利用_version的这一优点确保数据不会因为修改冲突而丢失,比如指定文档的version来做更改,如果那个版本号不是现在的,我们的请求就失败了。
- 新增操作:一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,副本将会在一个不同的节点上重建。
● one:写操作只要有一个primary shard是active活跃可用的,就可以执行
● all:写操作必须所有的primary shard和replica shard都是活跃可用的,才可以执行
● quorum:默认值,要求ES中大部分的shard是活跃可用的,才可以执行写操作
- 查询读操作:可以设置 replication 为 sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置replication 为 async 时,也可以通过设置搜索请求参数 _preference 为 primary 来查询主分片,确保文档是最新版本
2、Window启动ES步骤
elasticsearch-8.11.3
1、elasticSearch.bat启动ES
2、浏览器输入地址:http://localhost:9200/ 出入如下启动成功!
3、IK分词器放在如下路径
elasticsearch-head-master
1、使用npm 启动该项目
2、在如下路径下执行 npm run start
3、访问http://localhost:9100 启动成功
kibana-8.11.3
1、kibana.bat 启动
2、package.json 修改版本号与ES一致
3、访问地址:http://localhost:5601/app/dev_tools#/console 启动成功
3、Kibana 调用ES API示例
# ik_smart分词
GET /_analyze
{
"analyzer":"ik_smart",
"text":"我爱你,特靠谱"
}
#测试ik_max_word分词
GET /_analyze
{
"analyzer":"ik_max_word",
"text":"我爱你,特靠谱"
}
#新建索引
PUT helloes
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
#查看指定索引信息
GET /helloes
# 查看所有索引信息
GET *
# 删除索引
delete /helloes
#查看索引是否存在
HEAD /helloes
# 创建映射字段(PUT /索引库名/_mapping/类型名称)
PUT /helloes/_mapping
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_smart"
},
"images": {
"type": "keyword",
"index": "false"
},
"price": {
"type": "float"
}
}
}
#查看映射关系
GET /helloes/_mapping
#创建文档
POST /helloes/_doc
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
#创建文档自定义ID
POST /helloes/_doc/1
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
# 文档查询
GET /helloes/_doc/1
#搜索当前索引下所有数据
GET /helloes/_search
# 删除文档
DELETE /helloes/_doc/1
#文档修改 (数据不存在则新增)
POST /helloes/_doc/1
{
"title":"华为手机2",
"category":"华为",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":1999.00
}
#修改局部信息
POST /helloes/_update/1
{
"doc": {
"title":"小米手机",
"category":"小米"
}
}
#URL拼接条件查询
GET /helloes/_search?q=category:小米
# JSON 格式查询(全文检索)
GET /helloes/_search
{
"query": {
"match": {
"category": "小"
}
}
}
# JSON请求提查询所有数据
GET /helloes/_search
{
"query": {
"match_all": {}
}
}
# 查询返回指定字段
GET /helloes/_search
{
"query": {
"match_all": {}
},
"_source": ["title"]
}
# 分页查找 from:页码, size:页面调试
GET /helloes/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 20
}
#查询排序
GET /helloes/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
# 多条件查询
GET /helloes/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "小米"
}
},{
"match": {
"price": "1999"
}
}
]
}
}
}
# 值完全匹配
GET /helloes/_search
{
"query": {
"match_phrase": {
"title": "小米"
}
}
}
# 高亮查询
GET /helloes/_search
{
"query": {
"match_phrase": {
"category": "米"
}
},
"highlight": {
"fields": {
"category": {}//<----高亮这字段
}
}
}
#分组查询
GET /helloes/_search
{
"aggs":{//聚合操作
"price_group":{//名称,随意起名
"terms":{//分组
"field":"price"//分组字段
}
}
}
}