Windows使用(版本8.11)ElasticSearch、elasticsearch-head、kibana

下载安装引用这篇文章

目录

1、ES基本知识

核心术语

● 索引:index (相当于表)

● 类型:type (相当于表逻辑类型),早版本有类型

● 文档:document (相当于数据库表的行)

● 字段:fields(相当于数据库表列)

核心概念

● 映射:mapping (相当于表结构后定义)

● 近实时:NRT (Near real time)

● 节点:node (每一个服务器)

● shard replica (数据分片与备份)

倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和包含该属性值的各个记录地址。由于不是根据记录来确定属性,而是根据属性来确定记录的位置,所以称之为倒排索引。倒排索引改会在存储数据时将关键词和数据进行关联,保存到倒排表中,然后查询是,将查询内容进行分词后在倒排中进行查询,最后匹配数据即可

ES字典树

字典树又称单词查找树,Trie树,是一种树形结构,是一种哈系树的变种。典型应用于统计,排序和保存大量的字符串。

优点:利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

3个基本性质:

a. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。

b. 从根节点到某一节点,路径上经过的字符串连接起来,为改节点对应的字符串

c. 每一个节点的所有子节点包含的字符串都不相同。

ES怎么保证读写一致
  1. 更新操作:可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖

每个文档都有一个_version 版本号,这个版本号在文档被改变时加一。Elasticsearch使用这个 _version 保证所有修改都被正确排序,当一个旧版本出现在新版本之后,它会被简单的忽略。利用_version的这一优点确保数据不会因为修改冲突而丢失,比如指定文档的version来做更改,如果那个版本号不是现在的,我们的请求就失败了。

  1. 新增操作:一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,副本将会在一个不同的节点上重建。

● one:写操作只要有一个primary shard是active活跃可用的,就可以执行

● all:写操作必须所有的primary shard和replica shard都是活跃可用的,才可以执行

● quorum:默认值,要求ES中大部分的shard是活跃可用的,才可以执行写操作

  1. 查询读操作:可以设置 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示例

javascript 复制代码
# 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"//分组字段
   }
  }
 }
}
相关推荐
java1234_小锋3 分钟前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客4 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生4 分钟前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
戎梓漩14 分钟前
windows下安装curl,并集成到visual studio
ide·windows·visual studio
大数据编程之光20 分钟前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
B站计算机毕业设计超人22 分钟前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
在下不上天2 小时前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
蓝田~2 小时前
观察者模式和订阅模式
windows·观察者模式
智慧化智能化数字化方案2 小时前
华为IPD流程管理体系L1至L5最佳实践-解读
大数据·华为
PersistJiao4 小时前
在 Spark RDD 中,sortBy 和 top 算子的各自适用场景
大数据·spark·top·sortby