点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。
文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。
mysql的叫法
es的叫法
database数据库
索引集
table表
类型
行
文档
列
字段
(1)新建名叫index_good的索引(代表商品):
delete /index_good -- 先执行删除命令,以防同名
put /index_good -- 再执行新增
{
"settings": {
"number_of_shards": 3, -- 分片数量
"number_of_replicas": 2 -- 副本数量
}
}
get /index_good --查询刚刚创建好的索引是否存在
(2)新建字段[title、name、price],分别代表[商品标题、商品名、价格],并设置每个字段的属性=含(type、index、store、analyzer)
put /index_good/_mapping -- 新建字段,_mapping为固定写法
{
"properties": {
"title": { -- 新建title字段,商品标题
"type": "", -- 该字段的类型,可以是text、long、short、date、integer、object等
"index": true,-- 该字段是否索引,默认为true
"store": false,-- 该字段是否存储,默认为false
"analyzer": "ik_max_word" -- 该字段所使用的分词器,一般用ik_max_word即代表使用ik分词器
},
"name": { -- 新建name字段,商品名
"type": "",
"index": true,
"store": false,
"analyzer": "ik_max_word"
},
"price": { -- 新建title字段,商品价格
"type": "",
"index": true,
"store": false,
"analyzer": "ik_max_word"
},
}
}
get /index_good/_mapping --查询刚刚创建好的字段
字段属性
(3)新增一条文档数据
每条文档数据都有一个唯一标识_id(相当于rowid),_id可以自增或手动指定,_id以自增的方式插入:
post /index_good/_doc -- _doc为固定写法(doc=文档=mysql里面的行数据),每条文档数据都有一个“_id”值,此处“_doc”后面没有加“/id”,代表该条文档数据的_id自增
{
"title":"小米手机",
"name":"小米11青春版",
"price":"2399"
}
get /index_good/_search -- 查看刚刚插入的index_good索引数据
{
"query":{
"match_all":{}
}
}
指定_id的方式插入数据:
post /index_good/_doc/101 -- 指定该条文档数据的_id为101
{
"title":"小米手机",
"name":"小米11青春版",
"price":"2399"
}
如果插入的字段在es里面没有创建,es会先把没有创建的字段自动创建,再插入数据
(4)修改文档数据(修改文档数据必须指定_id)
put /index_good/_doc/101 -- 修改_id为101的文档数据
{
"title":"小米手机",
"name":"小米12",
"price":"3399"
}
(5)删除文档数据(删除文档数据必须指定_id)
delte /index_good/_doc/101 -- 删除_id为101的文档数据
(6)查询文档数据
查询数据比较复杂,其格式为:
match_all查询所有
get /index_good/_search
{
"query":{ -- 固定写法query
"match_all":{}
}
}
match模糊查询(将模糊条件进行or、and操作)
or:
get /index_good/_search
{
"query":{ -- 固定写法query
"match":{
"title":"小米手机" --or查询:match默认会用or连接匹配,相当于符合mysql的【title like “%小米%” or title like “%手机%”】的文档数据都会被搜索出来
}
}
}
and:
get /index_good/_search
{
"query":{
"match":{
"title":"小米手机",
"operator":"and" -- match会用and连接匹配,相当于符合mysql的【title like “%小米%” and title like “%手机%”】的文档数据都会被搜索出来
}
}
}
multi_match多字段查询
get /index_good/_search
{
"query":{
"multi_match":{ -- 只要title或者name含有“小米”即可被搜索到
"query":"小米",
"fields":["title","name"] -- 类似于把多个字段进行or连接查询
}
}
}
term单字段进准查询
精准查询的字段必须不为text类型,因为text类型的字段在查询中时可以被es进行分词查询的,这与精准查询矛盾
get /index_good/_search
{
"query":{
"term":{
"title":"oppo手机" -- 只有title=“oppo手机”的文档数据才会被查询到
}
}
}
term单字段进准查询下的fuzzy偏差查询
在term精准查询后,允许查询结果最多出现多少个字符的偏差,此时也满足查询条件
get /index_good/_search
{
"query":{
"fuzzy":{--允许title最多出现两个字符的偏差,如【xiaomi没偏差、iiaomi一个字符偏差、aaaomi两个字符偏差、xiaomiii两个字符偏差】都可以被查询到
"title":"xiaomi",
"fuzziness":2 -- 若不指定fuzziness,默认是一个偏差距离
}
}
}
terms多字段精准查询
精准查询的字段必须不为text类型
get /index_good/_search
{
"query":{
"terms":{
"title":["oppo手机","小米手机"] --只要title=“oppo手机”或者“小米手机”就可以被查询到
}
}
}
过滤查看
不使用includes:
get /index_good/_search
{
_source:[title] -- 在查询出来的结果中只显示title字段,其他不显示
"query":{
"term":{
"title":"oppo手机" -- 只有title=“oppo手机”的文档数据才会被查询到
}
}
}
使用includes:
get /index_good/_search
{
_source:{
"includes":["title"]
} -- 在查询出来的结果中只显示title字段,其他不显示
"query":{
"term":{
"title":"oppo手机" -- 只有title=“oppo手机”的文档数据才会被查询到
}
}
}
get /index_good/_search
{
_source:{
"excludes":["title"]
} -- 在查询出来的结果中显示除了title字段外的所有字段,其他不显示
"query":{
"term":{
"title":"oppo手机" -- 只有title=“oppo手机”的文档数据才会被查询到
}
}
}
bool查询
bool查询是将多个match、term、terms等等进行与(must)、或(must_not)、非(should)操作
get /index_good/_search
{
"query":{
"bool":{
"must":[--查询结果需满足【title="小米手机" and price=2699】
{"term":{"title":"小米手机"}},
{"term":{"price":2699}}
],
"must_not":{"match":{"name":"oppo"}}, -- 查询结果需满足【title="小米手机" and price=2699 and name not like '%oppo%'】
"should":{"term":{"price":"3000"}} --查询结果需满足【price =3000 or (title="小米手机" and price=2699 and name not like '%oppo%) 】
}
}
}
范围查询range
gt即大于,gte即大于等于,lt即小于,lte即小于等于:
get /index_good/_search
{
"query":{
"range":{
"price":{
"gt":2600, -- 查询2600<price<3000的文档数据,
"lt":3000
}
}
}
}
排序查询
把查询结果加上order by:
get /index_good/_search
{
"query":{
"term":{
"title":"oppo手机" -- 只有title=“oppo手机”的文档数据才会被查询到
}
},
"sort":[ -- 查询结果根据【order by price desc,name asc】进行排序
{"price":{"order":"desc"}},
{"name":{"name":"asc"}}
]
}
分页查询
get /index_good/_search
{
"query":{
"term":{
"title":"oppo手机" -- 只有title=“oppo手机”的文档数据才会被查询到
}
},
"sort":[ -- 查询结果根据【order by price desc,name asc】进行排序
{"price":{"order":"desc"}},
{"name":{"name":"asc"}}
],
"from":5, -- 从第5条数据开始取10条(es中的数据从第0条开始)
"size":10
}
(7) 其他命令
get /_cat/indices?v -- 查看es库中看所有的索引
get /_alias --查看es库中所有的别名
OK,如果文章哪里有错误或不足,欢迎各位留言。
创作不易,各位的「三连」是二少创作的最大动力!我们下期见!
手机扫一扫
移动阅读更方便
你可能感兴趣的文章