ES基础指令
在了解ES是什么之后,首先肯定是要学习一下基础的操作指令,
一、索引操作
1.创建索引
在创建索引的时候可以指定字段类型,区别分段字段和精确字段
text:支持分词、模糊搜索、全文检索(适合文章内容、古籍正文)
keyword:不分词、只能精确匹配(适合作者、分类、状态)
PUT /book
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"title":{"type":"text"},
"author":{"type":"keyword"},
"content":{"type":"text"}
}
}
}
number_of_shards代表主分片,就是给当前索引开几份原始数据,number_of_replicas代表副分片,就是主分片的备份数量,上面代码的意思是开一份原始数据,没有副本,mapping代表着字段映射,等价于MySQL建表时写name varchar(20)这种感觉,后面的类型就是上面的说的分不分词的类型
2.查看索引
查看索引就是类似MySQL中查看数据库的意思
GET /book
3.删除索引
DELETE /book
二、文档CRUD基础操作(文档就是类似于MySQL中的一条数据)
1.新增文档(指定ID)
PUT /book/_doc/1
{
"title":"论语",
"author":"孔子",
"content":"学而时习之,不亦说乎"
}
与上面的 PUT /book相比多了_doc/1,_ doc代表文档类型,告诉ES我要操作文档数据,1代表id
2.新增文档
POST /book/_doc
{
"title":"道德经",
"author":"老子",
"content":"道可道,非常道"
}
3.根据ID查询单条数据
GET /book/_doc/1
4.全量修改(覆盖整条数据)
PUT /book/_doc/1
{
"title":"论语修订版",
"author":"孔子",
"content":"学而时习之,不亦说乎"
}
5.局部修改(只更新指定字段)
POST /book/_update/1
{
"doc":{
"title":"论语新版"
}
}
6.删除文档
DELETE /book/_doc/1
三、核心检索指令
1.查询全部数据
GET /book/_search
{
"query":{
"match_all": {}
}
}
2.分词模糊查询
GET /book/_search
{
"query": {
"match": {
"content": "学而"
}
}
}
3.精确查询
GET /book/_search
{
"query": {
"term": {
"author": "孔子"
}
}
}
4.多字段同时查询
GET /book/_search
{
"query":{
"multi_match":{
"query":"论语",
"fields":["title","content"]
}
}
}
5.多条件组合查询(bool,业务核心)
must:必须满足(等价于 and)
should:满足其一即可(等价于 or)
must_not:一定不满足(等价于 not)
GET /book/_search
{
"query":{
"bool":{
"must":[
{"match":{"content":"之"}}
],
"should":[
{"term":{"author":"孔子"}}
]
}
}
}
6.分页 + 排序查询
from:起始下标,size:每页条数
{
"from":0,
"size":10,
"sort":[
{"_id":"desc"}
]
}
7.关键词高亮查询
GET /book/_search
{
"query":{
"match":{"content":"学而"}
},
"highlight":{
"fields":{
"content":{}
}
}
}
对content指定的区域进行了高亮操作
四、IK分词器
- ik_max_word:细粒度拆分,拆分所有可能词语,检索覆盖率高
- ik_smart:粗粒度智能拆分,结果更简洁
GET /_analyze
{
"analyzer":"ik_max_word",
"text":"经史子集翰林院"
}
GET /_analyze
{
"analyzer":"ik_smart",
"text":"经史子集翰林院"
}
以上就是ES的基础操作的代码了,这些必须要记住,否则集成到项目中的时候就会不知道用哪些方法,非常麻烦。