Elasticsearch

Elasticsearch简介

基于Lucene的开源分布式搜索引擎,大幅降低了PB级海量数据存储、检索、分析门槛
特点:
	分布式实时文件存储、检索、分析
	零配置、集群自动发现
	索引自动分片、副本机制
	RESTful风格接口
	多数据源
	自动搜索负载

启动

#切换至非root用户
#前台运行,停止方式CTRL+C
./opt/es/bin/elasticsearch #前台运行
#后台运行,停止方式 kill -9 pid
后台运行
	./opt/es/bin/elasticsearch -d
	nohup ./opt/es/bin/elasticsearch &
查看进程号
	ps -aux | grep 进程名

一、put、update、delete、get、post作用

方式作用
put增加/更新
update改变
delete删除
get查询
post查询/改变

二、ES数据模型

  • Index:索引,由多个Document组成
  • Type:索引类型,6.x中仅支持一个,以后将逐渐被移除
  • Document:文档,由多个Field组成
  • Field:字段,包括字段名与字段值
RDBMSElasticSearch
DatabaseIndex
TableType
Row删除
ColumnField

1、文档(Document)管理-1
文档是ES最小数据单元

  • 原始数据
    _source:原始JSON格式文档
    文档元数据
    _index:索引名
    _type:索引类型
    _id:文档编号
    _version:文档版本号用于并发控制
    _score:在搜索结果中的评分

1、文档(Document)管理-2
在这里插入图片描述
3、文档(Document)管理-3
批量插入

PUT _bulk
{"index/create/update/delete":{"_index":"...","_type":"...","_id":"..."}}
{"field1":"value1",……}

4、文档(Document)管理-4
批量读取

GET stu/doc/_mget
{"docs":[{"_id":"1"},{"_id":"2"}]}

GET stu/_mget
{"docs":[{"_type":"doc","_id":"1"},{"_type":"doc","_id":"2"}]}

GET _mget
{"docs":[{"_index":"stu","_type":"doc","_id":"1"},{"_index":"stu","_type":"doc","_id":"2"}]}

三、索引管理

1.创建索引

PUT demo.1234

2.带参数的索引创建

PUT demo.1234
{
    "settings" : {
        "index" : {
            "number_of_shards" : 2, 
            "number_of_replicas" : 2 
        }
    }
}

3.索引的映射
定义字段名、字段类型(text、keyword、date、long、double、boolean、ip、completion、geo_point……)
定义索引规则

PUT demo.12345
{
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "_doc" : {
            "properties" : {
                "field1" : { "type" : "text" }
            }
        }
    }
}

查看索引:GET demo.12345/_mapping
删除索引:DELETE demo.12345

四、ES分布式架构

节点:
	一个集群由多个节点组成,每个节点指定相同的cluster.name
	主节点负责创建索引、删除索引、分配分片、追踪集群中的节点状态等
	一个节点是一个ES实例,默认每个节点都可为候选主节点与数据节点,即:
	node.master: true
	node.data: true
索引:
	
分片:
	分片
		索引是指向一个或多个分片的逻辑命名空间
		最小级别的工作单元,一个Lucene实例(倒排索引)
	主分片
		静态不可变
		索引首先被存储在主分片中,然后复制相应的副本分片
	副本分片
		动态可修改
		用于故障转移,一旦主分片失效,副本分片晋升为主分片
副本:

五、ES搜索方式

1、URI Search:简易方式,可临时使用,不适合构建复杂查询

GET /索引/类型/_search	查询所有

GET /索引/类型/_search
{"query":{"match_all":{}}}

GET /索引/类型1?_source=字段列表        只展示哪个或哪几个

GET /索引/类型/_search
{
	"query":{
		"match":{json串}
	}
}

2、Query DSL(Domain Specific Language)基于JSON的查询语言
叶查询子句(Leaf query clauses)
用于在特定字段中查找特定值
match查询
term查询
range查询

复合查询子句(Compound query clauses)
可以包含叶子或者其它的复杂查询语句
bool查询

match_all:返回所有文档

GET stu/_search
{
    "query": {
        "match_all": {}
    }
}

match:布尔匹配查询;对查询字符串进行分词,根据分词结果构造布尔查询

GET stu/_search
{
    "query": {
        "match": {
          "name":"John Kerry"
        }
    }
}

match_phrase:短语匹配查询;对查询字符串进行分词,字段值必须依次匹配所有分词,注意各分词位置不能改变

GET stu/_search
{
    "query": {
         "match_phrase": {
          "name":"John Kerry"
        }
    }
}

match_phrase_prefix:短语前缀匹配查询;类似match_phrase,但最后一个分词作为前缀匹配

GET stu/_search
{
    "query": {
        "match_phrase_prefix": {
          "name":"John Ke"
        }
    }
}

multi_match:多字段匹配查询

GET stu/_search
{
    "query": {
        "multi_match": {
          "query": "John like cooking",
          "fields": ["name","interest"]
        }
    }
}

term:词条查询;按照存储在倒排索引中的确切字词,对字段进行匹配

GET stu/_search
{
     "query": {
         "term":{
          "name":"john"    #注意:值全部为小写
        }
    }
}

terms:多词条查询;按照存储在倒排索引中的确切字词,对字段进行多词条匹配

GET stu/_search
{
    "query": {
        "terms":{
          "name":["john","da"]
        }
    }
}

range:范围查询

GET stu/_search
{
    "query": {
        "range" : {
            "yearOfBorn" : {
                "gte" : 1995,
                "lte" : 2000
            }
        }
    }
}

bool:布尔查询
查询喜欢“cooking”且不在1995-2000间出生的学生

GET stu/_search
{
    "query": {
      "bool": {
        "must": {
            "match": { "interest": "cooking"} },
        "must_not": {
            "range": { "yearOfBorn": { "gte": 1995, "lte": 2000 }}}
      }
    }
}

六、分页

from+size浅分页

方式一:

GET stu/_search?size=5
GET stu/_search?size=5&from=5    # from:数据下标是从0开始的,表示从第几个数据开始

方式二:

GET stu/_search
{
  "query": {
    "match_all": {}
  },
  "size": 5,
  "from": 0       #取出所有文档,截取前5}

scroll深分页

scroll深分页:保存结果快照,需要分页时,直接从结果中获取
返回scroll_id与第一页内容,scroll_id 5分钟有效

GET stu/_search?scroll=5m
{
  "from": 0,
  "size": 5,
  "query": {"match_all": {}}
}

根据scroll_id不断获取下一页内容

GET _search/scroll
{
  "scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAANy……",
  "scroll": "5m"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值