【ElasticSearch】索引、文档、查询等基础语法(一)

本文列出的语法,为在kibana上查询的语法。本质上与curl、或postman相同,只是写法有差异而已。以后详细一些之后,会考虑增加一份curl的写法方便复制粘贴。

版本:
CentOS 8
ElasticSearch 7.9.2
Kibana 7.9.2
Docker 19.03.13

索引

新建索引

PUT /demo
{
	"settings": {
        "refresh_interval" : "5s",
		"number_of_shards": 3, 
		"number_of_replicas": 2
	}
}

refresh_interval:刷新间隔
number_of_shards:每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
number_of_replicas:每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改,可以为0。

新建索引并创建映射

  • type: text 可分词
  • type: keyword 不可分词
PUT /demo
{
  "settings": {
     "number_of_shards" :  12, 
     "number_of_replicas" : 1,
     "analysis":{   
      "analyzer":{
        "ik":{
          "tokenizer":"ik_max_word"
        }
      }
    }
  },
  "mappings":{
    "properties":{
      "id":{
        "type":"long"
      },
      "query":{
        "type":"text",
        "analyzer": "ik_max_word"
      },
      "content":{
        "type":"text",
        "analyzer": "ik_smart"
      }
    }
  }
}

这里需要说明一下,自ES7.4开始,不再支持指定索引类型,即mappings下不再支持比如指定book的类型指定。推测ES这样做的目的是,是因为过度指定类型,导致了相同字段不同含义的情况出现,ES的底层逻辑希望相同字段相同含义(这与部分面向对象思想略有冲突),所以去除了类型指定。

删除索引

DELETE /demo

查询全部索引

GET /_cat/indices?v

?v:增加列头显示

同时获取多个索引参数

GET demo,test
GET /_all

关闭/打开索引

POST /demo/_close
POST /demo/_open

映射

创建/增加映射

  • type: text 可分词
  • type: keyword 不可分词
PUT /demo/_mapping
{
  "properties": {
    "id": {
      "type": "long"
    },
    "query": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "content": {
      "type": "text",
      "analyzer": "ik_smart"
    }
  }
}

查询映射

GET /demo/_mapping
GET /test,demo/_mapping

文档的增删改查

新增/更新文档

POST /demo/_doc/1
{
	"query":"记者从直播电商与短视频发展年会上获悉,中国演出行业协会网络表演(直播)分会将在年内针对网络直播打赏行为出台指导规范,预计最快12月出台。除此之外,协会还将推出网络主播的分类分级管理规范,对非电商类主播进行评级。"
}

如果此步骤报错,请参考:【ElasticSearch】新增文档时,IK空指针报错match(char[], int, int) is null

1表示为指定的id,如已存在id,则会更新文档。
不写则会自动生成id。

仅新增文档,已存在则报错

POST /demo/_create/1
{
	"query":"记者从直播电商与短视频发展年会上获悉,中国演出行业协会网络表演(直播)分会将在年内针对网络直播打赏行为出台指导规范,预计最快12月出台。除此之外,协会还将推出网络主播的分类分级管理规范,对非电商类主播进行评级。"
}

POST /demo/_doc/1?op_type=create
{
	"query":"记者从直播电商与短视频发展年会上获悉,中国演出行业协会网络表演(直播)分会将在年内针对网络直播打赏行为出台指导规范,预计最快12月出台。除此之外,协会还将推出网络主播的分类分级管理规范,对非电商类主播进行评级。"
}

批量新增文档

POST /demo/_doc/_bulk
{"index":{"_id":"1"}}
{"query":"今天天气怎么样"}
{"index":{"_id":"2"}}
{"query":"今天你吃了吗"}
{"index":{"_id":"3"}}
{"query":"好好学习天天向上"}
{"index":{"_id":"4"}}
{"query":"今天天气好,适合学习"}
{"index":{"_id":"5"}}
{"query":"明天再吃饭"}

注意,这里json换行有可能导致报错,估计是按行传String的原因。
后面查询会基于这5条数据做DEMO。

更新文档内容

POST /demo/_update/1
{
	"doc": {
			"query": "记者从直播电商与短视频发展年会上获悉"
	}
}

更新文档新增字段

POST /demo/_update/1
{
	"script": "ctx._source.content= abcdefg"
}
  • script:标签 ctx:上下文 ._source = _source
  • 语义:通过上下文拿到 _source字段,新增content为abcdefg

更新文档删除字段

POST /demo/_update/1
{
	"script": "ctx._source.remove(\"content\")"
}

查询指定文档

GET /demo/_doc/1

多文档指定ID查询

GET _mget/
{
	"docs" : [ 
		{
			"_index" : "demo", 
			"_id" : "1"       
		},
		{
			"_index" : "demo",
			"_id" : "2"
		}
	]
}
GET demo/_mget/
{
	"docs" : [ 
		{
			"_id" : "1"       
		},
		{
			"_id" : "2"
		}
	]
}
GET demo/_mget/
{
	"ids":["1","2"]
}

查询

关键字查询,精确查询

  • term 单关键字
GET /demo/_search
{   
	"query":{  
	    "term":{    
	    	"query":"吃饭" 
		}
	}
}

terms 多关键字(或关系)

GET /demo/_search
{
	"query":{
		"terms":{
			"jerse_no": ["天气","学习"]
		}
	}
}

查询所有文档

GET /demo/_search
{
	"query":{
		"match_all":{}
	},
	"from": 0,
	"size": 2
}

分词后查询

GET /demo/_search
{
	"query":{
		"match":{
			"query": "天气学习"
		}
	},
	"from": 0,
	"size": 10
}

多条件查询

GET /demo/_search
{
	"query":{
		 "multi_match": {
      "query" : "天气",
      "fields":  ["query","content"] 
    }
	},
	"from": 0,
	"size": 10
}

短语查询(精确)

GET /demo/_search
{
	"query":{
		 "match_phrase": {
      "query" : "天气好"
    }
	},
	"from": 0,
	"size": 10
}

短语查询,最后一个词支持前缀匹配(允许不完整的输入)

GET /demo/_search
{
  "query": {
    "match_phrase_prefix": {
      "query": "天气怎"
    }
  },
  "from": 0,
  "size": 10
}

效果可以对比下面这个:

GET /demo/_search
{
  "query": {
    "match_phrase": {
      "query": "天气怎"
    }
  },
  "from": 0,
  "size": 10
}

match_phrase_prefix和match_phrase是相同的,除了它允许文本中最后一项使用前缀匹配。
主要

查询某字段非空的数据

GET /demo/_search
{
  "query": {
    "exists": {
      "field": "query"
    }
  },
  "from": 0,
  "size": 10
}

模糊搜索,但对于中文,词语中间的模糊结果似乎较差

GET /demo/_search
{
  "query": {
    "wildcard": {
      "query": "*了吗"
    }
  },
  "from": 0,
  "size": 10
}

正则表达式搜索

GET /demo/_search
{
  "query": {
    "regexp": {
      "query": ".*了吗"
    }
  },
  "from": 0,
  "size": 10
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值