介绍 Character Filter 在 Tokenizer 之前对文本进行处理, 例如增加删除及替换字符, 可以配置多个 Character Filters, 会影响 Tokenizer 的 position 和 offset 信息
自带: html_strip, mapping, pattern replace
Tokenizer 将原始的文本按照一定的规则, 切分为词 (term or token)
自带: whitespace, standard/ pattern/ keyword/ path hierarchy
Token Filter 将 Tokenizer 输出的单词 (term), 进行增加, 修改, 删除.
如自带的 lowercase, stop, synonym(添加近义词)
定义分词器 过滤html标签 # 自定义分词器
POST _analyze
{
"tokenizer": "keyword",
"char_filter": ["html_strip"],
"text":"<b>hello world</b>"
} 过滤之后的结果
{
"tokens" : [
{
"token" : "hello world",
"start_offset" : 3,
"end_offset" : 18,
"type" : "word",
"position" : 0
}
]
} 替换 将一个字符替换成其它字符Mapping的定义 可以对索引的数据字段设置类型, 还可以设置不变索引.也就是说不被搜索到.
PUT users {
"mappings": {
"properties": {
"firstName":{
"type": "text"
},
"lastName":{
"type": "text"
},
"mobile":{
"type": "text",
"index": false # 设置不变索引的字段
}
}
}
} 结果
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "users"
} 添加真实数据.
PUT users/_doc/1
{
"firstName":"sg",
"lastName":"foot",
"mobile":"123"
} 对已经禁止索引的mobile字段查询
POST /users/_search
{
"query": {
"match": {
"mobile": "123"
}
}
} 结果显示报错是:
{
"error" : {
"root_cause" : [
{
"type" : "query_shard_exception",
"reason" : "failed to create query: Cannot search on field [mobile] since it is not indexed.之前介绍过head, hd 软件, 两种都不如今天的主角(cerebro), 也推荐使用. 言归正传. 开始吧.
介绍 源码: https://github.com/lmenezes/cerebro
下载二进制包: https://github.com/lmenezes/cerebro/releases
集群名称 节点数 索引数 分片数 文档数 磁盘剩余量 节点名称,实心的星为主节点(即master节点), 空心的星为副节点(cluster节点) master 节点才有权限修改集群的状态 实线的方块代表主分片 虚线的方块代表副本分片 图片最上面有一条为黄色的线. 表示服务的健康状态. 在elasticsearch里有三种颜色
green 绿色为健康状态 所有的主分片和副本分片都已分配。你的集群是 100% 可用的。 yellow 黄色为亚健康状态 所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。 red 红色为非健康状态 至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。 安装 # 下载二进制包
cd /usr/local
wget https://github.com/lmenezes/cerebro/releases/download/v0.9.2/cerebro-0.9.2.zip
unzip cerebro-0.9.2.zip 修改配置文件 vim conf/application.conf
# 大约70行. 去掉 # 可以配置多个.
hosts = [
{
host = "http://127.0.0.1:9200" # 设置 elasticsearch 地址
name = "Localhost cluster" # 显示名称
# headers-whitelist = [ "x-proxy-user", "x-proxy-roles", "X-Forwarded-For" ]
}
# Example of host with authentication
#{
# host = "http://some-authenticated-host:9200"
# name = "Secured Cluster"
# auth = {
# username = "username"
# password = "secret-password"
# }
#}
] 启动 bin/cerebro
or nohup bin/cerebro &效果 图表格式显示, 展示比较丰富 可以自定义elasticsearch 的地址, 并显示服务的健康状态 安装使用 下载地址
wget https://github.com/360EntSecGroup-Skylar/ElasticHD/releases/tag/1.4 linux & maxOS
Step1: Download the corresponding elasticHD version,unzip xxx_elasticHd_xxx.zip
Step2: chmod 0777 ElasticHD
Step3: exec elastichd ./ElasticHD -p 127.0.0.1:9800
# 指定127.0.0.1地址与 9800 端口. window
Step1: Download the corresponding elasticHD version,Double click zip package to unzip
Step2: exec elastichd ./ElasticHD -p 127.0.0.1:9800 # 指定127.0.0.1地址与 9800 端口. nginx 代理 vim hd.conf upstream hd_server { server 127.0.0.1:9800 weight=1 max_fails=3 fail_timeout=60; } server { listen 80; server_name hd..1. 安装 httpd-tools .2. 创建密码目录 .3. 生成新的用户名和密码 .4. 查看用户名 .5. 应用到nginx配置上 .6. 报错无扩展(http_auth_basic_module) .6.1. 编译 http_auth_basic_module 扩展 安全永久是第一位
.1. 安装 httpd-tools yum install -y httpd-tools .2. 创建密码目录 mkdir -p /etc/nginx/ .3. 生成新的用户名和密码 可以创建多个用户和密码.
# admin 是你的帐号 # password 是你的密码 htpasswd -bc /etc/nginx/htpasswd.users admin password # 添加 root 帐号和密码 htpasswd -bc /etc/nginx/htpasswd.users root password .4. 查看用户名 cat /etc/nginx/htpasswd.users # admin:$apr1$9c2/hWtI$0CSGPb8xGTxbZ4CLOx2N3. # root:$apr1$9c2/fsadfasf1213xGTxbZ4fas12311. .5. 应用到nginx配置上 添加以下二行代码在 server节点上
auth_basic "Restricted Access"; # 验证 auth_basic_user_file /etc/nginx/htpasswd.为什么使用镜像,因为你在一个特色的国度, 所以你需要镜像为你加速,为你的开发加油.
github 镜像 GitClone README github镜像 直接搜索你要的库,请勿注册 码云github加速 软件镜像库 下载国外的软件,如 elasticsearch, docker, k8s 很慢, 就可以直接在这下载, 时时更新的.
华为开源镜像站下载 elasticsearch-head cd /usr/local
git clone https://github.com/mobz/elasticsearch-head 安装 npm 国内的 npm 很慢, 推荐使用 taobao 的镜像
使用 npm 别名方式
# 默认 bash
vim ~/.bashrc
# 如果你使用的是 zsh 的话
vim ~/.zshrc
# 最后一行添加
alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"
# 验证一下
cnpm -v 修改 Gruntfile.js 修改 elasticsearch-head 对外提供服务的配置
cd /usr/local/elasticsearch-head vim Gruntfile.js # 大约96行, connect.server.options 节点 修改连接 es 服务的配置 cd /usr/local/elasticsearch-head
vim _site/app.js
# 大约 4374 行 修改 elasticsearch.yml 文件 使用 head 助手需要 es 允许跨域访问Elasticsearch 是什么 Elasticsearch(ES) 是一个 Lucene 构建的开源,分布式,RESTful 接口全文搜索引擎.
还是一个分布式文档数据库, 其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据.它可以在很短的时间内存储, 搜索和分析大量的数据.
Elasticsearch就是为高可用和可扩展(水平扩展)而生
优点 横向可扩展性: 只需要增加一台服务器, 调整一点儿配置,启动一下Elasticsearch进程就可以并入集群. 分片机制提供更好的分布性: 同一个索引分成多个分片(sharding), 这点类似于HDFS的块机制,分而治之的方式可提升处理效率. 高可用:提供复制(replica)机制,一个分片可以设置多个复制,使得某台服务器在宕机的情况下,集群仍可以照常运行,并会把服务器宕机丢失的数据信息复制恢复到其它可用节点上. 使用简单:解压即可使用. 无需安装(bin/elasticsearch). 相关产品 Beats 它是一个代理, 将不同类型的数据发送到Elasticsearch中.
Filebeat: 主要用于转发和集中日志数据。 Metricbeat: 定期收集操作系统、软件或服务的指标数据 Metricbeat支持收集的module非常多,常用的有docker、kafka、mysql、nginx、redis、zookeeper等等 Packetbeat: 是一款轻量型网络数据包分析器,Packetbeat的工作原理是捕获应用程序服务器之间的网络流量,解码应用程序层协议(HTTP,MySQL,Redis等) Winlogbeat: Windows 事件日志 Auditbeat: Auditbeat 允许您在 Linux、macOS 和 Windows 平台上仔细监控任何您感兴趣的文件目录,主要用来记录安全信息,用于对系统安全事件的追溯 Heartbeat: 主要是检测服务或主机是否正常运行或存活,Heartbeat 能够通过 ICMP、TCP 和 HTTP 进行 ping 检测。 Functionbeat: 是在无服务器环境中部署的Elastic Beat,用于收集由云服务生成的事件并将事件发送到Elasticsearch。 Lucene 倒排索引 倒排索引与之相对是正向索引. 正向索引是通过 key 找 value, 倒排索引是对关键字建立倒排索引
正排索引: 文档ID到文档内容和单词的关联
倒排索引: 单词到文档ID的关系
例如, 假设我们有两个文档, 每个文档的内容如下:
我是一名程序员 我是一名高级程序员 为了创建倒排索引, 我们首先将每个文档的content域拆分成单独的词(称词条),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示:概要 Elasticsearch对外提供的API遵循REST原则
GET POST PUT DELETE 简介 _index 索引, 文档在哪儿存放 _type 类型, 7.x以后都使用 _doc类型 _id 文档唯一标识, 不指定则自动生成. 一个文档的 _index 、 _type 和 _id 唯一标识一个文档
基本RESTful操作 新增记录 create 二种操作. PUT, POST
PUT方法, /{_index}/_create/{id} 如果文档存在,操作失败
还可以使用 /{_index}/_doc/{id}?op_type=create
# 创建一个文档, 如果文档存在,操作失败
# 使用_create
PUT /student/_create/1
{
"name": "张三",
"age":19,
"sex":1
}
# 使用 _doc指定操作类型
PUT /student/_doc/3?op_type=create
{
"name": "张三丰",
"age":600,
"sex":1
}
# 自动生成ID
PUT /student/_doc/
{
"name": "张三元",
"age":600,
"sex":1
} POST方法 {index}/_doc/{id} 如果文档不存在则创建新文档, 文档存在则旧文档删除, 新的文档被索引, 版本信息+1配置文件目录 以上是常见的redis存放目录
vim /etc/redis.conf
vim /etc/redis/6379.conf 启动配置 # 后台运行: yes 是, no 不是
daemonize yes # 提供服务的端口
port 6379
# 对外提供的ip地址
bind 127.0.0.1 # 只允许本地连接,如果没有其它服务访问, 推荐这种.
bind 10.11.12.9 # 只允许局域网连接, 还有其它服务访问, [推荐]
bind 0.0.0.0 # 允许任意连接 # 设置客户端连接后进行任何其他指定前需要使用的密码。
requirepass mypass 限制配置 内存设置 默认redis没有内存上限, 如果超时物理内存就会实例挂掉. 所以勿必设置内存大小, 然后配合淘汰策略使用.
# 连接数限制 如果设置 maxclients 0,表示不作限制。
# 注意 2g 和 2gb 是有区别的. 见下面, 大小写不区分.
maxclients 1024 maxmemory 2gb 设置完后可以在: info memory看到
maxmemory:2147483648
maxmemory_human:2.00G 配置内存大小参考 # 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes 淘汰策略设置 # volatile-lru -> 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )
# allkeys-lru -> 利用LRU算法移除任何key
# volatile-random -> 移除设置过过期时间的随机key
# allkeys->random -> remove a random key, any key
# volatile-ttl -> 移除即将过期的key(minor TTL)
# noeviction -> 不移除任何可以,只是返回一个写错误 maxmemory-policy volatile-lru 快照配置 # save 900 1 900秒内至少有1个key被改变
# save 300 10 300秒内至少有300个key被改变
# save 60 10000 60秒内至少有10000个key被改变
save 900 1
save 300 10
save 60 10000
# 存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes
rdbcompression yes
# 本地持久化数据库文件名,默认值为dump.