上一篇记录了版本、工具以及注意的事项。
这篇就对 ElasticSearch 命令的使用进行记录。
与SpringBoot的整合 请见:ElasticSearch 入门 (三)
链接: http://localhost:5601/app/dev_tools#/console
注意运行时,鼠标光标一定要放在你要运行的指令上。
_doc 为默认的类型。今后好像要取消类型这个东西!!!!
_doc 为默认的类型。今后好像要取消类型这个东西!!!!
_doc 为默认的类型。今后好像要取消类型这个东西!!!!
创建命令
// PUT 创建命令 索引(student) 类型(_doc) id(1) PUT /student/_doc/1 { "name":"张三", "age":18 }
返回结果:
// 警告信息:不支持在文档索引请求中指定类型 // 而是使用无类型的端点(/{index}/_doc/{id}, /{index}/_doc,或 /{index}/_create/{id})。 { "_index" : "student", // 索引 "_type" : "_doc", // 类型 "_id" : "1", // id "_version" : 1, // 版本 "result" : "created", // *** 作类型 "_shards" : { // 分片信息 "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
可以通过 elasticsearch-head 进行查看:
指定索引中各个字段的类型
字符类型:text 、 keyword
数值类型:long, integer, short, byte, double, flfloat, half_flfloat, scaled_flfloat
日期类型:date
布尔类型:boolean
二进制:binary
指定索引中各个字段的类型:
PUT /student2 { "mappings":{ "properties": { "name":{ "type": "text" }, "age":{ "type": "long" }, "birthday":{ "type": "date" } } } }
查看一下 索引 student2:
GET /student2
查看所有索引的状态健康情况 分片,数据储存大小等等:
GET _cat/indices?v
删除索引:
DELETe /student1增删改查命令
新增命令
PUT /people/_doc/1 { "name":"张三", "age":30, "desc":"不知道如何形容", "tags":["丑男","旅游","交友"] }
查询命令
GET /people/_doc/1
修改命令
使用 POST 命令,在 id 后面跟 _update ,要修改的内容放到 doc 文档(属性)中即可。
POST /people/_doc/1/_update { "doc":{ "name":"张三1" } }
状态会更新
条件查询
// 通过 _serarch?q=name:张三 查询条件是name属性有张三的那些数据。 GET /people/_doc/_search?q=name:张三
_score得分,就是根据算法算出和查询条件匹配度高得分就高。
构建查询
GET /people/_doc/_search { "query":{ // 构建的查询条件 "match": { "name": "张三" } }, "sort":[ // 排序方式 desc asc { "age":{ "order":"desc" } }], "_source":["name","desc","age"], // 需要展示的属性 "from":0, // 分页参数 from size "size":2 }
布尔查询
must (and):
// 查询所有 name 属性为“ 张三 “的数据,并且年龄为30岁 GET /people/_doc/_search { "query":{ "bool": { "must": [ { "match": { "name": "张三" } }, { "match": { "age": "30" } } ] } } }
我们通过在 bool 属性内使用 must 来作为查询条件!看结果,是不是 有点像 and 的感觉,里面的条件需要都满足!
should (or):
// 查询所有 name 属性为“ 张三 “的数据,或者年龄为30岁 GET /people/_doc/_search { "query":{ "bool": { "should": [ { "match": { "name": "张三1" } }, { "match": { "age": "30" } } ] } } }
must_not (not): *** 作同理。
Fitter:
// 名字为张三, 25<=年龄<=30 GET /people/_doc/_search { "query":{ "bool": { "must": [ { "match": { "name": "张三" } } ], "filter": [ { "range": { "age": { "gte": 25, // gt 表示大于 "lte": 30 // gte 表示大于等于 } // lt 表示小于 } // lte 表示小于等于 } ] } } }
短语检索
// 标签属性中带有 旅游 和 男 多个用空格隔开 GET /people/_doc/_search { "query":{ "match": { "tags": "旅游 男" } } }
term查询精确查询
term和match的区别:
match是经过分析(analyer)的,也就是说,文档是先被分析器处理了,根据不同的分析器,分析出
的结果也会不同,在会根据分词 结果进行匹配。
term是不经过分词的,直接去倒排索引查找精确的值。
PUT testdb { "mappings":{ "properties":{ "name":{ "type":"text" }, "desc":{ "type": "keyword" } } } } // 添加数据 PUT testdb/_doc/1 { "name": "张三喜爱Java name", "desc": "张三喜爱Java desc" }
上述中testdb索引中,字段name在被查询时会被分析器进行分析后匹配查询。而属于keyword类型不会
被分析器处理。
GET testdb/_search { "query":{ "term": { "name": "张" } } }
可以查到信息
{ "query":{ "term": { "desc": "张" } } }
不能查看信息,只能通过 张三喜爱Java desc 作为整体去查。
GET _analyze { "analyzer": "keyword", // "analyzer": "standard", "text": "张三喜爱Java desc" }
可以通过上述只能去查看一下具体。
总结:keyword 字段类型不会被分析器分析!
高亮显示
GET /people/_doc/_search { "query":{ "match": { "name": "张三" } }, "highlight" :{ "pre_tags": "", // 可以自定义 "post_tags": "", // 可以自定义 "fields":{ "name":{} } } }
返回结果:
总结:一个索引下面只能创建一个类型就行了,其中各字段都具有唯一性,如果在创建映射的时候,如果没有指定文档类型,那么该索引的默认索引类型是 _doc ,不指定文档id则会内部帮我们生成一个id字符串。
本文参考了网上的资源。如有侵权请联系。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)