Elatisticsearch搜索引擎资料整理

查看集群健康信息

1
curl -X GET "http://localhost:9200/_cat/health?v"

查看节点的详细信息

1
curl -X GET "http://localhost:9200/_cat/nodes?v"

查看索引信息

1
curl -X GET "http://localhost:9200/_cat/indices?v"

创建索引(索引会自动创建)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
curl -X PUT "http://localhost:9200/customer?pretty"
curl -XPUT "http://localhost:9200/customer33?pretty" -H 'Content-Type: application/json' -d '{
"settings":{
"number_of_shards":5, //每个索引的主分片数,默认值是5,这个配置在索引创建后不能修改。
"number_of_replicas":2, //设置副本数量
//自定义索引默认分析器
"index":{
"analysis":{
"analyzer":{
"default":{
"tokenizer":"standard", //分词器
"filter":[ //过滤器
"asciifolding",
"lowercase",
"ourEnglishFilter"
]
}
},
"filter":{
"ourEnglishFilter":{
"type":"kstem"
}
}
}
}
},
"mapping": {
"_doc": {
"properties": {
"commodity_id": {
"type": "long"
},
"commodity_name": {
"type": "text"
},
"picture_url": {
"type": "keyword"
},
"price": {
"type": "double"
}
}
}
}
}'


查看索引设置

1
curl "http://127.0.0.1:9200/customer/_settings?pretty"

更新索引配置

1
curl -X PUT "http://127.0.0.1:9200/customer/_settings?pretty" -H 'Content-Type: application/json' -d '{"number_of_replicas": 3}'

查看索引字段信息

1
2
3
4
5
curl  http://192.168.253.206:9200/xinhua_en?pretty
curl "http://127.0.0.1:9200/customer/_mapping?pretty"
curl "http://127.0.0.1:9200/videos/fulltext/_mapping?pretty"


新增/更新数据

1
2
3
4
5
6
7
8
# PUT会将新的json值完全替换掉旧的;而POST方式只会更新相同字段的值,其他数据不会改变,新提交的字段若不存在则增加
# PUT和DELETE操作是幂等的
# POST操作不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建了若干的资源
# 创建操作可以使用POST,也可以使用PUT,区别就在于POST是作用在一个集合资源(/articles)之上的,而PUT操作是作用在一个具体资源之上的(/articles/123)。

curl -X PUT 'http://localhost:9200/customer/person/2' -H 'Content-Type: application/json' -d '{"user": "dennis","title": "工程师","desc": "数据库管理aaa"}'
# 更新带版本号
curl -X POST 'http://localhost:9200/customer/person/2/update?version=3' -H 'Content-Type: application/json' -d '{"user": "dennis","title": "工程师","desc": "数据库管理aaa"}'

查询数据

1
2
3
4
5
6
curl "http://127.0.0.1:9200/videos/_search"
curl "http://127.0.0.1:9200/customer/person/_search"
curl "http://127.0.0.1:9200/customer/person/_search?q=title:%E6%9D%8E%E9%B9%8F"
# 获取source数据
curl "http://127.0.0.1:9200/videos/fulltext/578406/_source?pretty"

删除数据

删除后不会马上删除,只是标记状态,会在添加索引的时候删除

1
curl -X DELETE  "http://192.168.0.252:9200/customer/person/1"

删除索引

1
curl -X DELETE "http://localhost:9200/customer?pretty"

分词分析

1
2
curl "http://127.0.0.1:9200/customer/person/_analyze" -H 'Content-Type: application/json'  -d '{"text":"搜索引擎","analyze":"ik_max_word"}'
curl "http://127.0.0.1:9200/customer/_analyze" -H 'Content-Type: application/json' -d '{"text":"搜索引擎","analyze":"ik_max_word"}'

相关配置

cluster.name: es_cluster

默认为节点的主机名

node.name: node-206
path.data: /data0/elasticsearch/data
path.logs: /data0/elasticsearch/log
network.host: 192.168.253.206
http.port: 9200
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

以文件的方式提供主机列表,可以动态修改,而不用重启节点

discovery.seed_providers

discovery.zen.ping.unicast.resolve_timeout

最小节点数量,基本的原则是这里需要设置成 N/2+1

discovery.zen.minimum_master_nodes: 2

两个节点的通讯超时时间 主节点-从节点

discovery.zen.ping.timeout: 3

加入集群超时时间

discovery.zen.join_timeout: 3

设置全新群集中符合主机要求的节点的初始集合. 默认情况下,该列表为空,这意味着该节点希望加入已经被引导的集群

cluster.initial_master_nodes

选定主节点发现时间间隔,默认1S

discovery.find_peers_interval

是否有资格成为master ,如果服务器配置不一致 建议设置高配服务器为true

node.master: true

设置为false的话这个节点就只能做master的候选 而不会去做索引的读写等操作,让master专心做领导(前提是集群节点比较多)

node.data: false

静态配置主机列表

discovery.seed_hosts 新配置,静态设置设置主机列表

discovery.zen.ping.unicast.hosts: [“192.168.253.207”, “192.168.253.206”,”192.168.253.205”]

自动发现

组播地址

discovery.zen.ping.multicast.group: 224.2.2.4

组播端口

discovery.zen.ping.multicast.port: 54328

广播消息ttl

discovery.zen.ping.multicast.ttl: 3

绑定的地址,null表示绑定所有可用的网络接口

discovery.zen.ping.multicast.address:null

多播自动发现禁用开关

discovery.zen.ping.multicast.enabled:true

一个集群必须有一个主节点(master node)。用来处理请求、索引的创建、修改、节点管理等。当有了master节点,该节点就要对各子节点进行周期性(心跳机制)的探测,保证整个集群的健康

es有两种集群故障探查机制

第一种是通过master进行的,master会ping集群中所有的其他node,确保它们是否是存活着的.
第二种,每个node都会去ping master node来确保master node是存活的,否则就会发起一个选举过程.
discovery.zen.fd.ping_interval:每隔多长时间会ping一次node,默认是1s
discovery.zen.fd.ping_timeout:每次ping的timeout等待时长是多长时间,默认是30s
discovery.zen.fd.ping_retries:如果一个node被ping多少次都失败了,就会认为node故障,默认是3次

mater挂掉后策略

all:一旦master当即,那么所有的操作都会被拒绝
write:这是默认的选项,所有的写操作都会被拒绝,但是读操作是被允许

每个node都会接收publish message,然后ack这个message,但是不会应用这个更新.
如果master没有在discovery.zen.commit_timeout指定的时间内(默认是30s),从至少discovery.zen.minimum_master_nodes个节点获取ack响应,那么这次cluster state change事件就会被reject,不会应用.

但是一旦在指定时间内,指定数量的node都返回了ack消息,那么cluster state就会被commit,然后一个message会被发送给所有的node.
所有的node接收到那个commit message之后,接着才会将之前接收到的集群状态应用到自己本地的状态副本中去.
接着master会等待所有节点再次响应是否更新自己本地副本状态成功,在一个等待超时时长内,如果接收到了响应,那么就会继续处理内存queue中保存的下一个更新状态.
discovery.zen.publish_timeout默认是30s,这个超时等待时长是从plublish cluster state开始计算的

https://zhouze-java.github.io/2019/01/25/Elasticsearch-103-%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2%E5%8F%8Azen-discovery%E9%9B%86%E7%BE%A4%E5%8F%91%E7%8E%B0%E6%9C%BA%E5%88%B6/

几乎所有的API操作,比如index,delete,search,等等,都不是说client跟master通信,而是client跟任何一个node进行通信,那个node再将请求转发给对应的node来进行执行

discovery.zen.hosts_provider:file

然后以$ES_PATH_CONF/unicast_hosts.txt下面描述的格式创建文件。每当对unicast_hosts.txt文件进行更改时,Elasticsearch都会选择新的更改,并使用新的主机列表。

基于文件的发现插件会增强单播主机列表 elasticsearch.yml:如果存在有效的单播主机条目, discovery.zen.ping.unicast.hosts则除了提供的那些之外,还将使用它们 unicast_hosts.txt。

该discovery.zen.ping.unicast.resolve_timeout设置还适用于通过基于文件的发现由地址指定的节点的DNS查找。同样需要指定时间单位,默认为5秒

插件:
bigdesk 对集群状态监控
head:可视化操作集群
kibana:用于读取es中的索引库type信息,并使用可视化的方式展示出来。包含柱状图、饼状图、折线图、仪表盘等

shards:分片,每个索引默认5个分片 0,1,2,3,4 默认每个分片有一个副本
replicas:副本
recovery:恢复,重启数据引擎
gateway:网关
discovery.zen:集群管理
transport:客户端

https://learnku.com/docs/elasticsearch73/7.3/index-some-documents/6450
https://www.elastic.co/guide/en/elasticsearch/reference/7.9/getting-started-index.html