【Elasticsearch】DSL操作相关

这篇具有很好参考价值的文章主要介绍了【Elasticsearch】DSL操作相关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DSL操作

索引操作

ES的索引与SQL的表很类似

新建索引
PUT /my_index
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
查询索引
# 如果查询的索引未存在,会返回错误信息
GET my_index
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
查看所有索引
GET _cat/indices
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能

这里的查询结果表示索引的状态信息,按顺序数据表示结果如下:

内容 含义 具体描述
yellow 单点正常 当前服务器健康状态:
green(集群完整) yellow(单点正常、集群不完整)
red(单点不正常)
open status 索引打开、关闭状态
my_index index 索引名
6KzntQINQMu5gHbFxx-GCg uuid 索引统一编号
1 pri 主分片数量
1 rep 副本数量
0 docs.count 可用文档数量
0 docs.deleted 文档删除状态(逻辑删除)
225b store.size 主分片和副分片整体占空间大小
225b pri.store.size 主分片占空间大小
删除索引
# 如果删除一个不存在的索引,那么会返回错误信息
DELETE /my_index
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能

映射操作

创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。

创建映射
PUT /my_index/_mapping
{
    "properties": {
        "name": {
            "type": "text",
            "index": true
        },
        "sex": {
            "type": "text",
            "index": false
        },
        "age": {
            "type": "long",
            "index": false
        }
    }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
  • 字段名:任意填写,例如name、sex、age

  • 数据类型(type)

    • String 类型,分两种
      • text:可分词
      • keyword:不可分词,数据会作为完整字段进行匹配,精准匹配的
    • Numerical:数值类型,分两类
      • 基本数据类型:long、integer、short、byte、double、float、half_float
      • 浮点数的高精度类型:scaled_float
    • Date:日期类型
    • Array:数组类型
    • Object:对象
  • 是否索引(index)

    默认true,即字段会被索引

    • true:字段会被索引,则可以用来进行搜索
    • false:字段不会被索引,不能用来搜索
  • 是否独立存储(store)

    默认为false

    原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。

  • 分词器(analyzer)

    这里的 ik_max_word 即使用 ik 分词器,后面会有专门的章节学习

查看映射
GET /my_index/_mapping
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
索引映射关联(同创建映射类似)
PUT /my_index1
{
    "settings": {},
    "mappings": {
        "properties": {
            "name": {
                "type": "text",
                "index": true
            },
            "sex": {
                "type": "text",
                "index": false
            },
            "age": {
                "type": "long",
                "index": false
            }
        }
    }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能

文档操作

文档是 ES 软件搜索数据的最小单位, 不依赖预先定义的模式,所以可以将文档类比为表的一行JSON类型的数据。

创建文档
POST my_index/_doc
{
  "id": 1001,
  "name": "alan",
  "age": 18,
  "city": "shanghai"
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
  • my_index:上面创建好的索引

  • 多次请求,会生成不同的ID,即不是幂等性的操作,不能使用put请求。

  • POST/PUT /my_index/_doc/1:最后那个1,指定唯一性标识(ID),默认情况下,ES服务器会自动生成一个,在响应体里有体现。

  • 如果明确了数据主键,也即是指定了ID,请求方式也可以是PUT请求

查询指定ID文档
GET /my_index/_doc/1002
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
查询所有文档
GET /my_index/_search
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
全局修改文档

修改文档本质上和新增文档是一样的,如果存在就修改,如果不存在就新增

POST/PUT /my_index/_doc/1002
{
  "id": 10022,
  "name": "alan",
  "age": 19,
  "city": "shanghai"
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
局部修改文档
POST /my_index/_update/1002
{
  "doc": {
    "id": 10025
  }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。

DELETE /my_index/_doc/1002
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
条件删除
POST /my_index/_delete_by_query
{
  "query":{
    "match":{
      "age":18
    }
  }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能

数据搜索

数据准备
PUT student/_bulk?refresh
{"index":{"_id": "1001"}}
{"name":"zhangsan","nickname":"zhangsan","sex":"男","age":30}
{"index":{"_id": "1002"}}
{"name":"lisi","nickname":"lisi","sex":"男","age":20 }
{"index":{"_id": "1003"}}
{"name":"wangwu","nickname":"wangwu","sex":"女","age":40 }
{"index":{"_id": "1004"}}
{"name":"zhangsan1","nickname":"zhangsan1","sex":"女","age":50 }
{"index":{"_id": "1005"}}
{"name":"zhangsan2","nickname":"zhangsan2","sex":"女","age":30 }
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
条件查询(match)

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系

# 查所有
GET /student/_search
{
 "query": {
   "match_all": {}
 }
}

# 按条件查询
GET /student/_search
{
 "query": {
   "match": {
     "name": "lisi"
   }
 },
 "_source": ["name", "age"]  # 指定查询字段,类似于SQL中的select,默认是*(查所有)
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
多字段条件查询(multi_match)
GET /student/_search
{
 "query": {
   "multi_match": {
     "query": "zhangsan",
     "fields": ["name","nickname"]
   }
 }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
关键字精确查询(term)
GET /student/_search
{
 "query": {
   "term": {
     "name": {"value": "zhangsan"}
   }
 } 
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
多关键字精确查询(terms)
GET /student/_search
{
 "query": {
   "terms": {
     "name": ["zhangsan","lisi"]
   }
 } 
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
过滤字段(_source)
GET /student/_search
{
 "_source": {
   "includes": ["name","nickname"]
 }, 
 "query": {
   "terms": {
     "nickname": ["zhangsan"]
   }
 }
}

GET /student/_search
{
 "_source": {
   "excludes": ["name","nickname"]
 }, 
 "query": {
   "terms": {
     "nickname": ["zhangsan"]
   }
 }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
组合查询(bool 与或非)
GET /student/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": "zhangsan"
                    }
                }
            ],
            "must_not": [
                {
                    "match": {
                        "age": "40"
                    }
                }
            ],
            "should": [
                {
                    "match": {
                        "sex": "男"
                    }
                }
            ]
        }
    }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
范围查询(range)
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
GET /student/_search
{
    "query": {
        "range": {
            "age": {
                "gte": 30,
                "lte": 35
            }
        }
    }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
模糊查询(fuzzy)

编辑距离(fuzziness)范围:[0, 1, 2]

编辑距离越高,允许更多的字符更改,这意味着更多的相似词将被包含在匹配中。例如,使用模糊度为1的查询词“apple”将匹配“ale”、“aple”、“aplee”等词。

当被查的字符长度大于2时,并且还没有指定fuzziness,用默认值1.

编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

  • 更改字符(box → fox)
  • 删除字符(black → lack)
  • 插入字符(sic → sick)
  • 转置两个相邻字符(act → cat)
GET /student/_search
{
    "query": {
        "fuzzy": {
            "name": {
                "value": "zhangsan"
            }
        }
    }
}

GET /student/_search
{
    "query": {
        "fuzzy": {
            "name": {
                "value": "zhangsan",
                "fuzziness": 0
            }
        }
    }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
字段排序(sort)

倒序:desc,正序asc

GET /student/_search
{
    "query": {
        "fuzzy": {
            "name": "zhangsan"
        }
    },
    "sort": [
        {
            "age": {
                "order": "desc"
            }
        },
        {
            "_score": {
                "order": "asc"
            }
        }
    ]
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
高亮查询(highlight)
GET /student/_search
{
    "query": {
        "match": {
            "name": "zhangsan"
        }
    },
    "highlight": {
        "pre_tags": "<font color='red'>",
        "post_tags": "</font>",
        "fields": {
            "name": {}
        }
    }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
分页查询(其实序号from,单页大小size)
GET /student/_search
{
    "query": {
        "match_all": {}
    },
    "sort": [
        {
            "age": {
                "order": "desc"
            }
        }
    ],
    "from": 0,
    "size": 2
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
聚合查询(aggs)
# 下面列举了几个常见的聚合函数,更多的自己摸索
GET /student/_search
{
    "aggs": {
        // 最大值
        "max_age": {
            "max": {
                "field": "age"
            }
        },
        // 最小值
        "min_age": {
            "min": {
                "field": "age"
            }
        },
        // 求和
        "sum_age": {
            "sum": {
               "field": "age"
           }
        },
        // 平均值
        "avg_age": {
            "avg": {
                "field": "age"
            }
        },
        // 去重后再计数
        "distinct_age": {
            "cardinality": {
                "field": "age"
            }
        }
        // topN
        "top_age_hits": {
          "top_hits": {
            "sort": [{
              "age":{
                "order": "desc"
              }
            }], 
            "_source": {
              "includes": ["name", "age"]
            }, 
            "size": 2  //这个size是控制top_hits显示的条数
          }
        }
        
    },
    "size": 0
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
State 聚合

stats关键字对某个字段一次性返回 count,max,min,avg 和 sum 五个指标

GET /student/_search
{
    "aggs": {
        "stats_age": {
            "stats": {
                "field": "age"
            }
        }
    },
    "size": 0
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能

索引模板

在实际开发中,我们可能需要创建不止一个索引,但是每个索引或多或少都有一些共性。

elasticsearch 在创建索引的时候,就引入了模板的概念,你可以先设置一些通用的模板,在创建索引的时候,elasticsearch 会先根据你创建的模板对索引进行设置。文章来源地址https://www.toymoban.com/news/detail-737960.html

创建模版
PUT _template/mytemplate
{
    "index_patterns": [
        "my*"
    ],
    "settings": {
        "index": {
            "number_of_shards": "1"
        }
    },
    "mappings": {
        "properties": {
            "now": {
                "type": "date",
                "format": "yyyy/MM/dd"
            }
        }
    }
}
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
查看模板
GET /_template/mytemplate
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
验证模板是否存在
HEAD /_template/mytemplate
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
创建索引
PUT testindex -> 不符合index_patterns的规则,不生效

PUT mytest -> 符合规则,生效
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能
删除模版
DELETE /_template/mytemplate
【Elasticsearch】DSL操作相关,# ElasticSearch,elasticsearch,大数据,搜索引擎,全文检索,人工智能

到了这里,关于【Elasticsearch】DSL操作相关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch:人类语言到 Elasticsearch 查询 DSL

    Elasticsearch 为开发者提供了强大的搜索功能。Elasticsearch 使用 DSL 来进行查询。对于很多从关系数据库过来的人,这个很显然不很适应。虽然我们可以使用 SQL 来进行查询,但是我们必须通过一些命令来进行转换。我们可以通过阅读文章: Elasticsearch:Elasticsearch SQL介绍及实例

    2024年02月04日
    浏览(48)
  • 微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 Sentinel

    聚合(aggregations)可以让我们极其 方便的实现对数据的统计、分析、运算 。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些 统计功能的比数据库的sql要方便的多,而且查询速度非常快 ,可以实现近

    2024年02月11日
    浏览(51)
  • 【ElasticSearch系列-03】ElasticSearch的高级句法查询Query DSL

    ElasticSearch系列整体栏目 内容 链接地址 【一】ElasticSearch下载和安装 https://zhenghuisheng.blog.csdn.net/article/details/129260827 【二】ElasticSearch概念和基本操作 https://blog.csdn.net/zhenghuishengq/article/details/134121631 【二】ElasticSearch的高级查询Query DSL https://blog.csdn.net/zhenghuishengq/article/details/1

    2024年02月06日
    浏览(56)
  • Elasticsearch索引库和文档的相关操作

    前言:最近一直在复习Elasticsearch相关的知识,公司搜索相关的技术用到了这个,用公司电脑配了环境,借鉴网上的课程进行了总结。希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。 小威在此先感谢各位

    2024年02月02日
    浏览(49)
  • Elasticsearch:DSL Query

    Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有的数据,一般测试用,例如:match_all,但有分页限制,一次20条左右 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。常见的有两种

    2024年02月10日
    浏览(53)
  • 【Elasticsearch】DSL查询文档

    目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.示例 1.2.4.总结 1.3.精准查询 1.3.1.term查询 1.3.2.range查询 1.3.3.总结 1.4.地理坐标查询 1.4.1.矩形范围查询 1.4.2.附近查询 1.5.复合查询 1.5.1.相关性算分 1.5.2.算分函数查询 1)语法说明 2)示例 3)小

    2024年02月16日
    浏览(41)
  • 【ElasticSearch】DSL查询语法

    Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。官方文档: 其中,常见的查询类型有: 查询所有 :查询出所有数据,一般测试用。例如: 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: 精确查询 :根据精确

    2024年02月16日
    浏览(44)
  • Elasticsearch Query DSL

    这里使用的 Elasticsearch 的版本为 7.12.1 。 1.1 文档(Document) ElasticSearch 是面向文档的,文档是所有可搜索数据的最小单位,例如 MySQL 的一条数据记录。 文档会被序列化成为 json 格式,保存在 ElasticSearch 中。 每个文档都有一个唯一 ID,例如 MySQL 中的主键 ID。 JSON文档 一篇文档包

    2024年02月15日
    浏览(56)
  • ElasticSearch DSL语法

    一、文档批量操作 1.批量获取文档数据 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式:GET 请求地址:_mget 功能说明 : 可以通过ID批量获取不同index和type的数据 请求参数: docs : 文档数组参数 _index : 指定index _type : 指定type(7.x的版本不推荐使

    2024年03月16日
    浏览(40)
  • ElasticSearch - DSL查询语法

    目录 DSL查询分类 全文检索查询 精确查询 地理查询 复合查询 相关性算分 算分函数查询 BooleanQuery DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询 常见的查询类型包括: 查询所有:查询出所有的数据,一般测试用;例如:match_all 全文检索(full text)查询

    2023年04月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包