elasticsearch 全文索引
正排索引-正向索引
分词
倒排索引
1速度快
2内存大
3高可用
索引压缩法 -》压缩key
ElasticSearch索引的思路:
它是通过各种各样的变态到极致的算法还有数据结构,实现让内存中的数据
少量,然后表示更多的数据(快大),在通过跳跃表的方式实现快速的根据
我们联合查询的多个集合,找到交集,并集,还有差集
ES 最多支持32G的内存;用分布式解决:可以 扩容,缩容,多个节点集群
集群: 当节点不同的时候 就ping3次 如果ping3次以上 就认为node挂了;
选举:如果主节点挂了也一样 ping不同就认为master挂了。 那就重新选举,那个uuid小哪个就更有机会成为master
脑裂问题:
选举出多个master 为脑裂 因为数据写入不一致了
discovery.zen.minimum_master_nodes: 节点/2+1 是最好的,然后跟master节点同一个网段内的node放多一些基本就能解决了
负载和分片副本:
介绍
elasticsearch 初步使用步骤
es官网下载es包和kibana包然后都分别双击bat文件启动:
然后 修改config下的elasticsearch.yml
network.host: 192.168.1.201
配置为可远程访问。 本地可忽略
可以使用KiBana当做搜索工具,下载kibana直接修改config里面配置的 elastic.host的地址。 默认是注释的打开后可以直接用然后 进入bin里面点击bat启动 就可以访问了,地址是:http://localhost:5601/app/kibana#/dev_tools/console。
直接使用dev_tools工具页面。
(1)创建一个新的索引 注意这里的名字(index_test)要小写 否则创建会报错。
PUT “localhost:9200/index_test”
如果返回下面的信息,则说明索引创建成功。如果不是,则ES会返回相应的异常信息。通常可以通过异常信息的最后一项推断出失败的原因。
{
“acknowledged”: true
}
(1-1) 删除索引
DELETE /index
删除多个
DELETE /index_one,index_two
DELETE /index_*
删除所有
DELETE /_all
DELETE /*
(2)
然后直接post http://localhost:9200/faridev2/test
body里传json就可以直接将数据写入并自动创建mapping了
(2-1)
如果是自己想设定mapping那就
POST farmest24/device_data/1
{
"settion": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"device_data": {
"properties": {
"Id": {
"type": "int"
},
"Name": {
"type": "string"
}
}
}
}
}
相对数据库来说。 这样一个表就创建完了 然后就可以插入数据了。
按照条件进行搜索 get
http://localhost:9200/faridev/_search
按照多条件查询
{
"query": {
"bool": {
"must": [{
"term": {
"orgId": "10190"
}
},
{
"term": {
"measurementTypeId": "6"
}
},
{
"term": {
"farmId": "440"
}
},
{
"term": {
"farmRoomId": "690"
}
},
{
"range": {
"collectTime": {
"gt": "2021-05-01T00:03:58",
"lt": "2021-06-30T00:17:32"
}
}
}
]
}
},
"from": 100,
"size": 200,
"sort": [{
"id": {
"order": "desc"
}
}]
}
================按照时间段进行搜索
GET fardev/_search
{
{
"size": 30,
"query": {
"range": {
"CollectTime": {
"gte": "2020-05-01T01:00:00", // 最小值
"lt": "2020-05-01T02:00:00" // 最大值
}
}
},
"sort": [#按照字段排序 {
"Id": {
"order": "desc"
}
}]
}
查询平均值最大值最小值汇总值等统计操作========
GET faev/device_data/_search
{
"size": 0,
"aggs": {
"group_by_colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": {
"avg": {
"field": "Value"
}
},
"sum_price" : {
"sum": {
"field": "Value"
}
},
"max_price" : {
"max": {
"field": "Value"
}
},
"min_price" : {
"min": {
"field": "Value"
}
}
}
}
}
}
//获取聚合函数汇总等数据库
POST /fardev/_search?pretty
{
"size": 0,
"aggs": {
"min_id": {
"min": {
"field": "Id"
}
},
"avg_id": {
"avg": {
"field": "Id"
}
},
"max_id": {
"max": {
"field": "Id"
}
}
}
}
修改字段类型为可索引 * 有的字段创建完之后es没有给创建索引 所以需要这种办法改下
PUT /fardev/_mapping?pretty
{
"properties": {
"Value": {
"fielddata": true,
"type":"double"
}
}
}
// 按照时间进行,统计
POST /fardev/device_data/_search?pretty
{
"size": 0,
"query":{
"range":{
"CollectTime":{
"gte" :"2019-11-17T23:48:22.72", // 最小值 有e代表等于(>=)
"lt" :"2019-11-18T03:48:22.72" //最大值
}
}
},
"aggs": {
"min_val": {
"min": {
"field": "SensorVal"
}
},
"avg_val": {
"avg": {
"field": "SensorVal"
}
},
"max_val": {
"max": {
"field": "SensorVal"
}
}
}
}
//按照时间批量删除
POST fazai_dev/device_data/_delete_by_query
{
"query": {
"bool": {
"filter": {
"range": {
"CollectTime": {
"lt":"2021-01-14T00:00:01",
"gte":"2021-01-11T00:00:01"
}
}
}
}
}
}
多条件查询 []
POST farmzai_dev/device_data/_search
{
"query": {
"bool": {
"must": [{
"terms": {
"OrgId": ["10190","10191"]
}
},
{
"term": {
"FarmId": "440"
}
},
{
"term": {
"FarmRoomId": "690"
}
},
{
"range": {
"CollectTime": {
"gt": "2021-05-01T00:03:58",
"lt": "2021-06-30T00:17:32"
}
}
}
]
}
},
"from": 100,
"size": 200,
"sort": [{
"Id": {
"order": "desc"
}
}]
}
先根据多条件进行查询,然后再根据id查询出最大的日期进行分组显示
GET farmv/devata/_search
{
"query": {
"bool": {
"must": [{
"terms": {
"DeviceId": [10237,
11426,
10216,
10217,
10226,
10240,
10412]
}
}
]
}
},
"size": 0,
"aggs": {
"group_by_tags": {
"terms": { "field": "DeviceId" },
"aggs": {
"avg_price": {
"max": { "field": "CollectTime" }
}
}
}
}
}