ElasticSearch初探之基本概念和CRUD(二)

  • 基本概念简介

index:索引,相当于关系数据库中的数据库database
type:类型,类似关系数据库中table
document:文档,相当于表中行记录row
field:列,相当于table中的colum
shard:分片,每个index包含多个shard,每个shard是保存数据的lucene实例。shard又分为:primary shard(ps) 和replica shard(rs),即主分片和副本分片,默认ps= 5,type中的每个document只能存在其中一个ps以及和它对应的rs中,ps和它对应的rs不能在同一个节点内(容错考虑)。

  • 一个索引创建后,primary shard不可修改,但为了集群的高可用性和便于横向扩展replica shard可以动态修改。
PUT /users/_settings
{
   "number_of_replicas" : 10 //修改副本分片数
}
  • 基本操作举例

es是完成基于RESTful web接口规范,以下基于rest风格举例
查看es状态

[root@Eden666 ~]# curl -XGET 'http://localhost:9200/_cluster/health?pretty'
{
  "cluster_name" : "elasticsearch",
  "status" : "yellow", //三种状态:green 完全可用,集群功能齐全,yellow:所有数据可用,但是有些副本尚未分配,red:部分数据有丢失
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 5, //初始5个primary shard 分片
  "active_shards" : 5,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 5,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 50.0
}

1、新增数据(POST),其中users就是index,coder是type,id就是field,若出现以下情况是因为es6.x版本需加入headers之Content-type(所有请求方式都一样),详情可参考官网(https://www.elastic.co/blog/strict-content-type-checking-for-elasticsearch-rest-requests

[root@Eden666 ~]# curl -XPOST  'localhost:9200/users/coder/3?pretty=true' -d '{"name":"eden03","age":10}'
{
  "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
  "status" : 406
}
[root@Eden666 ~]# curl -H 'Content-type:application/json' -XPOST  'localhost:9200/users/coder/3?pretty=true' -d '{"name":"eden03","age":10}'
{
  "_index" : "users",
  "_type" : "coder",
  "_id" : "3",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 2
}

2、修改(PUT)

[root@Eden666 ~]# curl -H 'Content-type:application/json' -XPUT  'localhost:9200/users/coder/3?pretty=true' -d '{"name":"eden03-new","age":100}'
{
  "_index" : "users",
  "_type" : "coder",
  "_id" : "3",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 4,
  "_primary_term" : 2
}

3、查看(GET)

[root@Eden666 ~]# curl   -XGET  'localhost:9200/users/coder/3?pretty=true' 
{
  "_index" : "users",
  "_type" : "coder",
  "_id" : "3",
  "_version" : 2,
  "found" : true,
  "_source" : {
    "name" : "eden03-new",
    "age" : 100
  }
}

4、删除(DELETE),可以发现删除查询结果返回found=false

[root@Eden666 ~]# curl   -XDELETE  'localhost:9200/users/coder/3?pretty=true' 
{
  "_index" : "users",
  "_type" : "coder",
  "_id" : "3",
  "_version" : 3,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 5,
  "_primary_term" : 2
}
[root@Eden666 ~]# curl localhost:9200/users/coder/3?pretty=true
{
  "_index" : "users",
  "_type" : "coder",
  "_id" : "3",
  "found" : false
}

5、其他检索方式,查询字符串方式和DSL(Domain Specific Language特定领域语言)方式

  • 字符串查询:具有局限性,不够灵活
[root@Eden666 ~]# curl localhost:9200/users/coder/_search?pretty=true
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "users",
        "_type" : "coder",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "eden02",
          "age" : 30
        }
      },
      {
        "_index" : "users",
        "_type" : "coder",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "eden01",
          "age" : 20
        }
      }
    ]
  }
}
[root@Eden666 ~]#  curl  'localhost:9200/users/coder/_search?q=name:eden01&pretty'
{
  "took" : 14,  //查询毫秒数
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "users",
        "_type" : "coder",
        "_id" : "1",
        "_score" : 0.2876821,  //检索的document的分数,分数越高越容易检索到
        "_source" : {
          "name" : "eden01",
          "age" : 20
        }
      }
    ]
  }
}
  • DSL方式:可以建立复杂查询条件。match:匹配的字段值,size:指定返回document数,from:位移量,默认是0
[root@Eden666 ~]# curl -H "Content-Type:application/json"  -XGET 'localhost:9200/users/coder/_search?pretty' -d  '{"query":{"match":{"name":"eden02"}},"size":1,"from":0}'
{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "users",
        "_type" : "coder",
        "_id" : "2",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "eden02",
          "age" : 30
        }
      }
    ]
  }
}
  • DSL查询之 or 和 and检索
//or检索:"query":{"match":{"name":"eden02 eden01"}}
[root@Eden666 ~]# curl -H "Content-Type:application/json"  -XGET 'localhost:9200/users/coder/_search?pretty' -d  '{"query":{"match":{"name":"eden02 eden01"}},"size":10,"from":0}'
{
  "took" : 13,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "users",
        "_type" : "coder",
        "_id" : "2",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "eden02",
          "age" : 30
        }
      },
      {
        "_index" : "users",
        "_type" : "coder",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "eden01",
          "age" : 20
        }
      }
    ]
  }
}
//and检索需使用到布尔查询
//{"bool": {"must": [ { "match": { "name": "eden01" } },{ "match": { "age": 20 } }]}}
[root@Eden666 ~]# curl -H "Content-Type:application/json"  -XGET 'localhost:9200/users/coder/_search?pretty' -d  '{"query":{"bool": {"must": [ { "match": { "name": "eden01" } },{ "match": { "age": 20 } }]}},"size":10,"from":0}'
{
  "took" : 19,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.287682,
    "hits" : [
      {
        "_index" : "users",
        "_type" : "coder",
        "_id" : "1",
        "_score" : 1.287682,
        "_source" : {
          "name" : "eden01",
          "age" : 20
        }
      }
    ]
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容