ES安装和学习

ES学习
Elasticsearch分布式全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可以扩展到上百台服务器
cluster(集群)
node(节点) 
index(索引)    数据库
type(类型)      表
document(文档)  行
field(域)       列
Mapping(映射) 存储域field的相关映射信息,不同type会有不同的mapping。
shards&&Replicas(分片和副本) 数据可以分为较小的分片。每个分片放到不同的服务器上  为提高查询吞吐量或实现高可用性,可以使用分片副本  主分片(Primary shard) 副本分片(Replica shard)    

安装
tar es
vi elasticsearch.yml
cluster.name: my-test  同一个集群必须一样
node.name: node-1 节点名称必不一样
node.master: true  可以成为master
node.data: true
network.host: 10.8.4.37  真实ip  http.port: 9200 默认端口
discovery.seed_hosts 当您想要与其他主机上的节点组成群集时,你必须使用 discovery.seed_hosts 来提供群集中可以成为master
cluster.initial_master_nodes: ["node-1", "node-2"]  初始化选master

###sysctl -w vm.max_map_count=262144 es最小内存
vi /etc/security/limits.conf  加入
esuser hard nofile 65536
esuser soft nofile 65536

安装时一定要切换到普通用户(非root账号)!!  创建用户!!!1
groupadd esgroup
useradd esuser -g esgroup  -p espassword
chown -R esuser:esgroup elasticsearch-6.3.2(赋予该目录下虽有的文件都可以操作执行的权限).
su esuser
./elasticsearch -d 后台启动,可在当前终端继续操作  8以上的版本需要1.9上启动   -Xms512m -Xmx512m

web页面查看
ElasticSearch Head.zip拖入到chrome扩展程序就可以使用了
###################### 使用head等插件监控集群信息,需要打开以下配置项 ###########
# http.cors.enabled: true
# http.cors.allow-origin: "*"
# http.cors.allow-credentials: true


linux安装jdk
wget http://download.oracle.com/otn-pub/java/jdk/9.0.1+11/jdk-9.0.1_linux-x64_bin.tar.gz   file看类型  html文件所以解压不了
tar -zxvf ./jdk-9.0.1_linux-x64_bin.tar.gz -C /usr/local
vi /etc/profile
#set java environment
JAVA_HOME=/usr/local/jdk-9.0.1/jdk-9.0.1
JRE_HOME=/usr/local/jdk-9.0.1/jdk-9.0.1/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
source /etc/profile

增删改查
PUT test/doc/2   修改或新建
{
  "name":"wangfei",
  "age":27,
  "desc":"热天还不让后人不认同"
}
GET test 查索引
GET test/doc/1 查文档信息
GET test/doc/_search  查询所有
DELETE test/doc/3 DELETE test 删除索引
POST test/doc/1/_update 修改
{  
  "doc":{
    "desc":"生活就像 茫茫海上"
  }
}
查询!!!!
GET test/doc/_search?q=name:wangfei
结构化查询  筛选
GET test/doc/_search
{
  "query":{
    "match":{
      "name":"wang"
    }
  }
}
elasticsearch在内部对文档做分词的时候,对于中文来说,就是一个字一个字分的,所以,我们搜中国,中和国都符合条件
可以用match_phrase 或者针对中文的插件
match_phrase_prefix最左  match返回所有匹配的分词
multi_match
倒叙排序
"sort": [
    {
      "age": {
        "order": "desc"
      }
    }
 ]
 分页查询   是内存分页
 "query": {
    "match_phrase_prefix": {
      "name": "wang"
    }
  },
  "from": 0,
  "size": 1
}

bool查询  must 必须满足  should (只要符合其中一个条件就返回)
#### 多条件组合查询
GET test/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "wanggfei"
          }
        },{
          "match": {
            "age": 25
          }
        }
      ]
    }
  }
}
filter(条件过滤查询,过滤条件的范围用range表示gt表示大于、lt表示小于、gte表示大于等于、lte表示小于等于)
"filter": {
        "range": {
          "age": {
            "gte": 10,
            "lt": 27
          }
        }
      }
bool查询总结!!!
must:与关系,相当于关系型数据库中的 and。
should:或关系,相当于关系型数据库中的 or。
must_not:非关系,相当于关系型数据库中的 not。
filter:过滤条件。
range:条件筛选范围。
gt:大于,相当于关系型数据库中的 >。
gte:大于等于,相当于关系型数据库中的 >=。
lt:小于,相当于关系型数据库中的 <。
lte:小于等于,相当于关系型数据库中的 <=。

只需要查看name和age两个属性,提高查询效率"_source": ["name","age"]
!!!!!
精确查询与模糊查询  term则不经过分词!!,它是直接去倒排索引中查找了精确的值了  match是经过analyer,会分词,注意不同类型查询会不会分词
t1类型为text,会经过分词!!!  t2类型为keyword类型,不会经过分词!!!
多个精确值(terms)
GET test/doc/_search
{
  "query": {
    "terms": {
      "age": [
        "27",
        "28"
      ]
    }
  }
}

聚合查询avg、max、min、sum  被封装在aggs中,而my_avg则是为查询结果起个别名,封装了计算出的平均值
GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "my_max": {
      "max": {
        "field": "age"
      }
    }
  },
  "size": 0, 
  "_source": ["name","age","from"]
}

get返回 别名aliases   mappings信息:包括索引类型doc  settings设置。包括该索引的创建时间,主副分片的信息,UUID等等

字段数据类型:
文本(text)、关键字(keyword)、日期(data)、整形(long)、双精度(double)、布尔(boolean)或ip  JSON的层次结构性质的类型

index属性默认为true,如果该属性设置为false,那么,elasticsearch不会为该属性创建索引,也就是说无法当做主查询条件
number_of_shards是主分片数量(每个索引默认5个主分片),而number_of_replicas是复制分片,默认一个主分片搭配一个复制分片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章