Elasticsearch语法整理

分类: 软件应用 > 其他

一、索引操作:

1. 创建索引

PUT /${index_name}
{
	"settings": {  // 索引相关的设置项
		"number_of_shards": 15, // 指定主分片个数
		"number_of_replicas": 2, // 指定副分片个数
	},
	"mappings": {  // 映射(表架构)
		"properties": {
		}
	}
}
2. 删除索引

DELETE /${index_name}

3. 关闭索引

POST /${index_name}/_close

4. 打开索引

POST /${index_name}/_open

5. 别名操作

POST /_aliases
{
	"actions": [
		{
			"add": {  // 添加别名或更新配置
				"index": ${index_name},
				"alias": ${alias_name}
			}
		},
		{
			"remove": {  // 删除别名
				"index": ${index_name},
				"alias": ${alias_name}
			}
		}
	}
}

二、映射操作

1. 查看映射

GET /${index_name}/_mapping

2. 扩展映射

POST /${index_name}/_mapping
{
	"properties": {
		$(field): {
			"type": $(type)
		}
	}
}

3. 动态映射

    1)当字段没有定义时,ES可以根据写入的数据自动定义该字段的类型

    2)一般提前定义好数据类型并将索引创建语句纳入SVN或Git管理范围

4. 基本类型

    1)keyword类型:不进行切分的字符串类型

    2)text类型:可进行切分的字符串类型

    3)数值类型:long、integer、short、byte、double、float、half_float、scaled_float、unsigned_log,尽可能选择范围小的数据类型,可用于对文档进行过滤、排序和聚合

    4)布尔类型

    5)日期类型: date,默认是标准的UTC格式,可通过format属性自定义格式 yyyy-MM-dd HH:mm:ss

    6)数组类型: []

    7)对象类型: {"properties": {}}

    8)地理类型: geo_point,lat为纬度,lon为经度

5. 多字段:

    针对同一个字段,需要不同的数据类型;

    定义好字段之后,可使用fields定义其子字段的类型

    访问字段:$(filed_name).$(filed_name_keyword)

三、文档操作

1. 单条写入文档

POST /${index_name}/_doc/${_id} // 当${id}不存在时,该_id值由ES自动生成
{
	${field_name}: ""
}

2. 批量写入文档

POST /_bulk
{"index": {"_index": "${index_name}"}}
{"_id": "", "${filed_name}": ""}
{"index": {"_index": "${index_name}"}}
{"_id": "", "${filed_name}": ""}

3. 更新单条文档

POST /${index_name}/_update/${_id}
{
	"doc": {
		"${field_name}": ""
	}
}

4. 批量更新文档

POST /_bulk
{"update": {"_index": "${index_name}", "_id": "${_id}"}}
{"doc": {"${filed_name}": ""}}
{"update": {"_index": "${index_name}", "_id": "${_id}"}}
{"doc": {"${filed_name}": ""}}

5. 根据条件更新文档

POST /${index_name}/_update_by_query
{
	"query": {},
	"script": {}  // 相当于mysql的set
}

6. 删除单条文档

DELETE /${index_name}/_doc/${_id}

7. 批量删除文档

POST /_bulk
{"delete": {"_index": "${index_name}", "_id": "${_id}"}}
{"delete": {"_index": "${index_name}", "_id": "${_id}"}}

8. 根据条件删除文档

POST /${index_name}/_delete_by_query
{
	"query": {}
}

四、搜索辅助功能

1. 文档计总

GET /${index_name}/_count // 返回匹配的文档条数

2. 文档搜索

GET /${index_name}/_search
// _source:指向一个json数组,数组中的元素就是希望返回的字段
// from: 设置搜索的起始位置【int类型】
// size: 设置搜索返回的文档个数,最大值为10000【int类型】
// profile:性能分析【boolean型】

3. 评分解析

GET /${index_name}/_explain/${doc_id}
// 评分分析:在使用搜索引擎时,一般都会涉及到排序功能。如果用户没有指定字段进行排序,则EC会使用自己的打分算法对文档进行排序

五、搜索匹配功能:${query}子数组的属性命以及值

1. 查询所有文档,并设置所有文档的分值term查询

match_all: {"boost": 2}

2. term查询:结构化精准查询的主要查询方式,用于查询待查字段和查询值是否完全匹配

{
	"term": {
		${field_name}: {
			"value": ""
		}
	}
}

3. terms查询:用于查询一个或多个值与待查字段是否完全匹配

{
	"term": {
		${field_name}: [
			"value1",
		]
	}
}

4. range查询:用于范围查询,一般是对叔侄型和日期型数据的查询

    1)gt:大于

    2)lt:小于

    3)gte:大于或等于

    4)lte:小于或等于

5. exists查询:用于某个字段不为空的查询,字段不为空的条件有

    1)值存在且不是null

    2)值不是空数组

    3)值是数组,但不是[null]

6. 布尔查询:复合搜索,是一种在一个搜索语句中包含一种或多种搜索子句的搜索

    1)must查询:必须匹配该查询条件【与】

    2)should:可以匹配该查询条件【或】

    3)must not:必须不匹配该查询条件【非 与】

    4)filter:必须匹配过滤条件,不进行打分计算

{
	"query": {
		"bool": {
			"must": [
				{}, {}
			]
		}
	}
}

7. match查询:全文搜索的主要代表

来源:原创 发布时间:2022-06-30 12:56:47