行业知识
kibana操作es使用DSL查询
前言
记录下kibana操作es,使用DSL进行创建索引,简单查询,版本7.7.1
()目录
- 前言
- 创建
- 删除
- 添加
- 更新
- 查询
创建
settings 中配置索引分片为,这个结合自己的节点数量
在mappings里面配置字段,如果有字段不需要被索引,可以设置index为false,默认是true
()在 Elasticsearch 的索引映射中将字段的 index 属性设置为 false 时,这意味着该字段将不会被索引,因此不能用来进行搜索。这通常用于那些不需要被搜索的字段,比如内嵌的文档、大型文本字段等。
设置字段的 index 属性为 false 有助于减少索引的大小,提高性能,并且可以防止不必要的字段搜索,从而提高搜索的效率。
如果希望某个字段不参与搜索,可以将其 index 属性设置为 false。但需要注意的是,一旦索引被创建并且数据被索引,就不能再更改字段的 index 属性。
在Elasticsearch中,geo_point 是一种特殊的字段类型,用于存储地理位置数据,例如经度和纬度。这种类型允许索引和搜索地理位置信息,并支持一系列地理位置相关的查询和聚合操作。
geo_point 字段类型要求数据格式为经纬度对,通常以数组形式表示,例如:
{ "location": { "lat": 40.7128, "lon": -74.0060 }}在上面的示例中,location 字段是一个 geo_point 类型,它包含了纬度(lat)和经度(lon)信息。
使用 geo_point 类型,可以执行各种地理位置相关的操作,如距离计算、地理范围查询、地理聚合等。这使得 Elasticsearch 成为了一个强大的地理信息系统(GIS)平台,可用于处理各种地理空间数据。
PUT /your_index_name{ "settings": { "number_of_shards": 3 }, "mappings": { "properties": { "ip": { "type": "keyword" }, "region_name": { "type": "text", "analyzer": "ik_max_word" }, "city_name": { "type": "keyword", "index":false }, "location": { "type": "geo_point" } } }}删除
注意删除索引谨慎操作
在Elasticsearch中,可以通过设置索引的保留策略(Index Lifecycle Management)来控制索引的保留和删除。这样可以根据需求自动管理索引的生命周期。
以下是一些常用的方法来防止索引被意外删除:
-
设置索引别名(Index Aliases): 在创建索引时,将索引与一个别名关联。然后,应用程序在查询数据时使用别名而不是直接使用索引名称。如果需要删除索引,可以简单地解除别名与索引的关联,而不是直接删除索引。
-
设置索引保留策略: 使用 Index Lifecycle Management (ILM) 功能,在索引被创建时为其设置保留策略。通过定义策略,可以控制索引的生命周期,包括何时删除索引。可以基于索引的年龄、文档数量、索引大小等指标来触发删除操作。
-
限制删除索引的权限: 在 Elasticsearch 的安全设置中,通过角色和权限控制来限制用户或应用程序对索引的删除权限。确保只有授权的用户或应用程序才能执行删除索引的操作。
通过以上方法,可以有效地防止索引被意外删除,同时保护数据的安全性和可用性。
DELETE /your_index_name
设置索引别名,需要使用Alias API。以下是一个使用DSL语句来设置索引别名的示例:
PUT /_aliases{ "actions": [ { "add": { "index": "your_index_name", "alias": "your_alias_name" } } ]}这个DSL语句将索引 your_index_name 添加到别名 your_alias_name 中。可以根据需要多次执行此操作,以将多个索引添加到同一个别名中,或者将同一个索引添加到多个别名中。
要删除索引别名,可以使用类似的DSL语句,只需将 add 改为 remove 即可:
PUT /_aliases{ "actions": [ { "remove": { "index": "your_index_name", "alias": "your_alias_name" } } ]}添加
要使用DSL语句向Elasticsearch添加数据,需要使用Index API。以下是一个使用DSL语句添加数据的示例:
POST /your_index_name/_doc{ "field1": "value1", "field2": "value2", "field3": "value3"}在上面的示例中,your_index_name 是要添加数据的索引名称,_doc 是文档的类型,它通常用于Elasticsearch 7.x之后的版本。需要替换 field1、field2 和 field3 为实际的字段名称,并提供对应的值。
如果索引已经存在,可以使用 PUT 方法替代 POST 方法来更新现有的文档。例如:
PUT /your_index_name/_doc/your_document_id{ "field1": "new_value1", "field2": "new_value2", "field3": "new_value3"}在这种情况下,需要提供文档的唯一标识符 your_document_id,以便Elasticsearch能够更新指定的文档。
更新
要使用DSL语句更新Elasticsearch中的文档,可以使用Update API。以下是一个使用DSL语句更新文档的示例:
POST /your_index_name/_update/your_document_id{ "doc": { "field1": "new_value1", "field2": "new_value2" }}在上面的示例中,your_index_name 是索引的名称,your_document_id 是要更新的文档的唯一标识符。在 doc 字段中,需要提供要更新的字段及其新值。
如果想要执行一些特殊的操作,例如增量更新或者基于现有字段值进行更新,可以使用脚本来实现:
POST /your_index_name/_update/your_document_id{ "script": { "source": "ctx._source.field1 += params.value", "params": { "value": 10 } }}在上面的示例中,使用脚本对 field1 的值进行了增量更新,增加了10。可以根据需要调整脚本和参数。
查询
DSL(Domain Specific Language)是Elasticsearch中用于构建查询和操作索引的查询语言。下面是DSL语句的一些示例,包括简单查询、聚合查询和复杂查询:
- 简单查询:
GET /your_index_name/_search{ "query": { "match": { "field_name": "search_term" } }}这个DSL语句执行了一个简单的全文搜索,查找包含指定搜索词的文档。
- 聚合查询:
GET /your_index_name/_search{ "size": 0, "aggs": { "avg_price": { "avg": { "field": "price" } } }}这个DSL语句执行了一个聚合查询,计算了名为 price 的字段的平均值。
- 复杂查询:
GET /your_index_name/_search{ "query": { "bool": { "must": [ { "match": { "field1": "value1" }}, { "range": { "field2": { "gte": 10, "lte": 100 }}} ], "should": [ { "match": { "field3": "value3" }} ], "must_not": [ { "term": { "field4": "value4" }} ] } }}这个DSL语句执行了一个复杂的布尔查询,包含了多个条件(必须匹配、应该匹配、不能匹配)。可以根据实际需求调整条件。
-