注:下文中-u elastic:123456是为了适应本机设上了密码的ES,如读者的没有设置,那么请忽略这部分内容。
【查看索引信息】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/_cat/indices?v'
反馈:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .security-7 c3ozcN3FRAyYEgn2V21ypA 1 0 7 0 25.7kb 25.7kb
【显示node节点信息】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/_cat/nodes?v'
反馈:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.32.130 48 93 3 0.00 0.10 0.13 cdhilmrstw * node-1
【查看集群健康状况】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/_cat/health?v'
反馈:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1650113556 12:52:36 liangshan green 1 1 1 1 0 0 0 0 - 100.0%
以上三个命令都是非业务相关,只关注业务的可以先跳过。
【CRUD之插数据】
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XPUT 'localhost:9200/liangshan/emp/1?pretty' -d' {"name":"songjiang","age":"45","salary":"100000","hire-date":"2002-1-1T12:12:12","title":"boss"}'
反馈:
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XPUT 'localhost:9200/liangshan/emp/2?pretty' -d' {"name":"wuyong","age":"44","salary":"90000","hire-date":"2001-1-1T12:12:12","title":"manager"}'
反馈:
"_index" : "liangshan",
"_type" : "emp",
"_id" : "2",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XPUT 'localhost:9200/liangshan/emp/3?pretty' -d' {"name":"likui","age":"43","salary":"80000","hire-date":"2000-1-1T12:12:12","title":"killer","skill":"axe-wing"}'
反馈:
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 1
}
通过以上三次插值操作,就给梁山公司添加了三名雇员:宋江、吴用和李逵。
【CRUD之找出全部雇员】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/liangshan/emp/_search?pretty'
反馈:
{
"took" : 940,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "songjiang",
"age" : "45",
"salary" : "100000",
"hire-date" : "2002-1-1T12:12:12",
"title" : "boss"
}
},
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "wuyong",
"age" : "44",
"salary" : "90000",
"hire-date" : "2001-1-1T12:12:12",
"title" : "manager"
}
},
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
]
}
}
【CRUD之按名称找雇员】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/liangshan/emp/_search?q=name:likui&pretty'
反馈:
{
"took" : 110,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808291,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_score" : 0.9808291,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
]
}
}
可以看到,还真把逵子找出来了。
按名称查询的另一种方式:
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XGET 'localhost:9200/liangshan/emp/_search?pretty' -d' {
"query":{
"match":{
"name":"likui"
}
}
}'
反馈:
{
"took" : 12,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808291,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_score" : 0.9808291,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
]
}
}
这样也可找出逵子。
【CRUD之按年龄过滤】
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XGET 'localhost:9200/liangshan/emp/_search?pretty' -d' {
"query":{
"bool":{
"filter":{
"range":{
"age":{"gt":"43"}
}
}
}
}
}'
反馈:
{
"took" : 67,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.0,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "1",
"_score" : 0.0,
"_source" : {
"name" : "songjiang",
"age" : "45",
"salary" : "100000",
"hire-date" : "2002-1-1T12:12:12",
"title" : "boss"
}
},
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "2",
"_score" : 0.0,
"_source" : {
"name" : "wuyong",
"age" : "44",
"salary" : "90000",
"hire-date" : "2001-1-1T12:12:12",
"title" : "manager"
}
}
]
}
}
想找43岁以上员工,于是45岁的宋江和44岁的吴用就被找出来了,43的逵子自然不在列。
【CRUD之按id找出数据】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/liangshan/emp/3?pretty'
反馈:
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_version" : 2,
"_seq_no" : 7,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
命令目的是查找李逵,还真找到了。
【CRUD之 按名字查找】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/liangshan/emp/_search?q=name:likui&pretty'
反馈:
{
"took" : 638,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.9808291,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_score" : 0.9808291,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
]
}
}
【CRUD之按技能查找】
命令:
curl -u elastic:123456 -XGET 'localhost:9200/liangshan/emp/_search?q=skill:axe-wing&pretty'
反馈:
{
"took" : 36,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.5753642,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_score" : 0.5753642,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
]
}
}
只有李逵一人有技能,名为旋风斧,还真找到了。
【CRUD之按年龄范围查找】
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XGET 'localhost:9200/liangshan/emp/_search?pretty' -d' {
"query":{
"range":{
"age":{"from":"43","to":"44"}
}
}
}'
反馈:
{
"took" : 45,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"name" : "wuyong",
"age" : "44",
"salary" : "90000",
"hire-date" : "2001-1-1T12:12:12",
"title" : "manager"
}
},
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
]
}
}
43是李逵,44是吴用,还真找到了这两人。
【CRUD之按薪水范围查找】
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XGET 'localhost:9200/liangshan/emp/_search?pretty' -d' {
"query":{
"range":{
"salary":{"from":"75000","to":"85000"}
}
}
}'
输出:
{
"took" : 11,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"name" : "likui",
"age" : "43",
"salary" : "80000",
"hire-date" : "2000-1-1T12:12:12",
"title" : "killer",
"skill" : "axe-wing"
}
}
]
}
}
薪水在七万五到八万之间的只有逵子,还真给找出来了。
【CRUD之删除记录】
命令:
curl -u elastic:123456 -XDELETE 'localhost:9200/liangshan/emp/2?pretty'
反馈:
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "2",
"_version" : 5,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 8,
"_primary_term" : 1
}
确认是否删除掉了:
curl -u elastic:123456 -XGET 'localhost:9200/liangshan/emp/2?pretty'
反馈:
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "2",
"found" : false
}
【全文搜索之匹配】
这种模式能拆分短语,然后进行匹配。
首先我们需要创建三条数据:
curl -u elastic:123456 -H "Content-Type: application/json" -XPUT 'localhost:9200/liangshan/emp/4?pretty' -d' {"name":"linchong","age":"42","salary":"70000","hire-date":"1999-1-1T12:12:12","title":"clerk","interest":"rock climbming"}'
curl -u elastic:123456 -H "Content-Type: application/json" -XPUT 'localhost:9200/liangshan/emp/5?pretty' -d' {"name":"wusong","age":"41","salary":"60000","hire-date":"1998-1-1T12:12:12","title":"clerk","interest":"hunting"}'
curl -u elastic:123456 -H "Content-Type: application/json" -XPUT 'localhost:9200/liangshan/emp/6?pretty' -d' {"name":"huarong","age":"40","salary":"50000","hire-date":"1997-1-1T12:12:12","title":"clerk","interest":"rock discovery"}'
然后找兴趣为攀岩的,命令是:
curl -u elastic:123456 -H "Content-Type: application/json" -XGET 'localhost:9200/liangshan/emp/_search?pretty' -d' {
"query":{
"match":{
"interest":"rock climbming"
}
}
}'
反馈是:
{
"took" : 243,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.2832261,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "4",
"_score" : 1.2832261,
"_source" : {
"name" : "linchong",
"age" : "42",
"salary" : "70000",
"hire-date" : "1999-1-1T12:12:12",
"title" : "clerk",
"interest" : "rock climbming"
}
},
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "6",
"_score" : 0.4889865,
"_source" : {
"name" : "huarong",
"age" : "40",
"salary" : "50000",
"hire-date" : "1997-1-1T12:12:12",
"title" : "clerk",
"interest" : "rock discovery"
}
}
]
}
}
可以看到,林冲和花荣都被找出来了,他们按相关性高低排序,林冲得分1.28,他的兴趣与查询关键词匹配度较高;花荣得分0.48,他的兴趣只与关键词有部分匹配。
这种查询方式在传统数据库上实现起来已经很困难了。
【全文检索之短语匹配】
这种模式不进行关键词拆分,而是去看全文中包含完整短语的匹配。
命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XGET 'localhost:9200/liangshan/emp/_search?pretty' -d' {
"query":{
"match_phrase":{
"interest":"rock discovery"
}
}
}'
反馈:
{
"took" : 31,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.7466557,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "6",
"_score" : 1.7466557,
"_source" : {
"name" : "huarong",
"age" : "40",
"salary" : "50000",
"hire-date" : "1997-1-1T12:12:12",
"title" : "clerk",
"interest" : "rock discovery"
}
}
]
}
}
结果花荣被找出来了。
【高亮搜索】
首先我们更新一下花荣的数据:
curl -u elastic:123456 -H "Content-Type: application/json" -XPUT 'localhost:9200/liangshan/emp/6?pretty' -d' {"name":"huarong","age":"40","salary":"50000","hire-date":"1997-1-1T12:12:12","title":"clerk","interest":"He likes rock discovery on spare time."}'
高亮搜索命令:
curl -u elastic:123456 -H "Content-Type: application/json" -XGET 'localhost:9200/liangshan/emp/_search?pretty' -d' {
"query":{
"match_phrase":{
"interest":"rock discovery"
}
},
"highlight":{
"fields":{
"interest":{}
}
}
}'
反馈:
{
"took" : 493,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.8474333,
"hits" : [
{
"_index" : "liangshan",
"_type" : "emp",
"_id" : "6",
"_score" : 0.8474333,
"_source" : {
"name" : "huarong",
"age" : "40",
"salary" : "50000",
"hire-date" : "1997-1-1T12:12:12",
"title" : "clerk",
"interest" : "He likes rock discovery on spare time."
},
"highlight" : {
"interest" : [
"He likes <em>rock</em> <em>discovery</em> on spare time."
]
}
}
]
}
}
可以看到查询结果中多了一个highlight的部分,这个部分包含了interest属性匹配的文本部分,并以HTML标签<em></em>封装。
END