本文列出的语法,为在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
}