ElasticSearch 基本使用

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

ElasticSearch 基本使用

系统环境

ElasticSearch:elasticsearch:7.14.1

kibana:7.14.1

服务器:Ubuntu 16.04.6 LTS

一、简介

Elasticsearch 是一个分布式的、开源的搜索分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化

Elastic Search基于lucene,封装了许多lucene底层功能,提供了分布式的服务、简单易用的restful API接口和许多语言的客户端

Elasticsearch 简称ES, 经常与Logstash 和Kibana 一起使用,江湖人称ELK.

  • 这E 自然指的就是Elasticsearch,简称ES, 具有分布式存储,搜索和分析的功能
  • L 指的就是Logstash,分布式日志收集框架
  • K 指的就是Kibana,可视化分析框架

二、参考文档

docker部署es

REST APIS 参考文档

Java REST Client 参考文档

三、ES核心概念

核心概念

  • 集群(Cluster):包含一个或多个启动着es实例的机器群。通常一台机器起一个es实例。默认集群名是“elasticsearch”,同一网络,同一集群名下的es实例会自动组成集群

  • 节点(Node):一个es实例即为一个节点

  • 索引(Index):即拥有相似文档的集合

  • 类型(Type):每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field。7.x版本正式被去除

  • 文档(Document):es中的最小数据单元。一个document就像数据库中的一条记录。通常以json格式显示。多个document存储于一个索引(Index)中

  • 映射(Mapping):定义索引中的字段的名称,定义字段的数据类型,比如字符串、数字、布尔

数据类型

  • 简单数据类型
    • 字符串:text:会分词,不支持聚合。keyword:不会分词,将全部内容作为一个词条,支持聚合
    • 数值
    • 布尔:boolean
    • 二进制:binary
    • 范围类型:integer_range, float_range, long_range, double_range, date_range
    • 日期:date
  • 复杂数据类型
    • 数组:[ ] Nested: nested (for arrays of JSON objects 数组类型的JSON对象)
    • 对象:{ } Object: object(for single JSON objects 单个JSON对象)

四、REST APIS

索引API

# 创建索引
PUT /my_index_000001

# 添加映射
PUT /my_index_000001/_mapping
{
   "properties":{
     "name":{
       "type":"text"
     },
     "age":{
       "type":"integer"
     }
   }
}

# 更新映射   更新映射也就是只添加字段
PUT /my_index_000001/_mapping
{
   "properties": {
      "name":{
       "type":"text"
      },
      "picture_url": {
			  "type": "keyword",
			  "ignore_above": 500
		  }
    }
}


# 查询所有索引
GET _cat/indices

# 查看一个索引
GET /my_index_000001

# 删除索引
DELETE /my_index_000001

# 创建索引并添加映射
PUT /my_index_000002
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "birthday":{
        "type": "date",
        "format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd"
      }
    }
  }
}

# 创建多个索引,并添加映射
PUT /my_index_000002,my_index_000003
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "birthday":{
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
    }
  }
}

文档API

# 创建索引,并添加映射
# 下边的设置允许birthday字段存储年月日时分秒、年月日及毫秒三种格式
PUT /my_index_000005
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "birthday":{
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
    }
  }
}

# 插入一条数据 这里的1是文档id,没有指定id自动生成id
POST /my_index_000005/_doc/1
{
  "name": "test1",
  "age": 16,
  "birthday": "2015-01-01"
}
# 插入一条数据
POST /my_index_000005/_doc/2
{
  "name": "test1",
  "age": 16,
  "birthday": "1420070400001"
}
# 插入一条数据
POST /my_index_000005/_doc/3
{
  "name": "test1",
  "age": 16,
  "birthday": "2015-01-01 13:14:59"
}

# 查询这个索引中的所有文档
GET /my_index_000005/_search
# 根据id查询文档
GET /my_index_000005/_doc/1


# 删除文档
DELETE my_index_000005/_doc/1

# 修改文档
PUT my_index_000005/_doc/2
{
  "name":"李四",
  "age": 18,
  "birthday": "1420070400001"
}

查询文档API

query基本匹配查询关键字说明

关键字 说明
match_all 查询简单的 匹配所有文档。在没有指定查询方式时,它是默认的查询
match 用于全文搜索或者精确查询,如果在一个精确值的字段上使用它, 例如数字、日期、布尔或者一个 not_analyzed 字符串字段,那么它将会精确匹配给定的值
range 查询找出那些落在指定区间内的数字或者时间 gt 大于;gte 大于等于;lt 小于;lte 小于等于
term 被用于精确值 匹配
terms terms 查询和 term 查询一样,但它允许你指定多值进行匹配
exists 查找那些指定字段中有值的文档
missing 查找那些指定字段中无值的文档
must 多组合查询 必须匹配这些条件才能被包含进来
must_not 多组合查询 必须不匹配这些条件才能被包含进来
should 多组合查询 如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分
filter 多组合查询 这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档

环境准备

# 创建索引
PUT xc_course
# 添加映射
PUT /xc_course/_mapping
{
  "properties": {
    "description": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "name": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      },
      "pic":{
        "type":"text",
        "index":false
      },
      "price": {
        "type": "float"
      },
      "studymodel": {
        "type": "keyword"
      },
      "timestamp": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }  
  }
}

POST /xc_course/_doc/1
{
"name": "Bootstrap开发",
"description": "Bootstrap是由Twitter推出的一个前台页面开发框架,是一个非常流行的开发框架,此框架集成了多种页面效果。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。",
"studymodel": "201002",
"price":38.6,
"timestamp":"2018-04-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg"
}

POST /xc_course/_doc/2
{
"name": "java编程基础",
"description": "java语言是世界第一编程语言,在软件开发领域使用人数最多。",
"studymodel": "201001",
"price":68.6,
"timestamp":"2018-03-25 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg"
}

POST /xc_course/_doc/3
{
"name": "spring开发基础",
"description": "spring 在java领域非常流行,java程序员都在用。",
"studymodel": "201001",
"price":88.6,
"timestamp":"2018-02-24 19:11:35",
"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg"
}

只查询一条studymodel为201001的数据

POST /xc_course/_search
{
  "query": {
    "match": {
      "studymodel": "201001"
    }
  },
  "size": 1
}

只查询前20条studymodel为201001的数据并以price降序排列

POST /xc_course/_search
{
  "query": {
    "match": {
      "studymodel": "201001"
    }
  },
  "size": 20,
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

只查询前20条price大于50小于90的数据并以price降序排列

POST /xc_course/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 50,
        "lte": 90
      }
    }
  },
  "size": 20,
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

只查询前20条timestamp为下面具体值的数据并以price降序排列

POST /xc_course/_search
{
  "query": {
    "terms": {
      "timestamp": [
        "2018-02-24 19:11:35",
        "2018-03-25 19:11:35"
      ]
    }
  },
  "size": 20,
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

五、SQL REST API

POST /_sql
{
  "query": """
  SELECT * FROM "xc_course" where studymodel = 201001 ORDER BY price DESC LIMIT 5
  """
}

POST /_sql
{
  "query": """
  SELECT * FROM "ks-logstash-log*"
  """,
  "fetch_size":5
}

使用ES查询DSL进行过滤

POST /_sql
{
  "query": "SELECT * FROM xc_course ORDER BY price DESC",
  "filter":{
    "range": {
      "price": {
        "gte": 50,
        "lte": 90
      }
    }
  },
  "fetch_size":5
}


POST /_sql
{
  "query": "SELECT * FROM xc_course ORDER BY price DESC",
  "filter":{
    "terms": {
      "studymodel": ["201001"]
    }
  },
  "fetch_size":5
}

异步运行sql搜索文章来源地址https://www.toymoban.com/news/detail-414307.html

POST /_sql
{
  "query": """
  SELECT * FROM "ks-logstash-log*"
  """,
  "fetch_size":20,
  "wait_for_completion_timeout": "1s"
}
  • 值为is_partialtrue表示搜索结果不完整
  • is_runningtrue表示搜索仍在后台运行
  • 一个id用于搜索

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

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

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

相关文章

  • ElasticSearch 基本使用

    系统环境 ElasticSearch:elasticsearch:7.14.1 kibana:7.14.1 服务器:Ubuntu 16.04.6 LTS Elasticsearch 是一个 分布式 的、开源的 搜索分析引擎 ,支持各种数据类型,包括文本、数字、地理、结构化、非结构化 Elastic Search基于lucene, 封装 了许多 lucene 底层功能,提供了分布式的服务、简单易用

    2023年04月15日
    浏览(27)
  • Elasticsearch 基本使用(四)聚合查询

    说到聚合查询,马上会想到 SQL 中的 group by,ES中也有类似的功能,名叫 Aggregation。 统计分组后的数量 按年龄分组,然后统计每个年龄人数 count(*) ,age xxx group by age 非文档字段分组 文档字段分组 直接使用文档字段分组会报错。 ES没有对文本字段聚合,排序等操作优化;如果对

    2024年02月12日
    浏览(45)
  • ES(Elasticsearch)的基本使用

    Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级 NoSQL数据库 ,重点关注数据存储格式,是key-value格式,也就是键值对的存储形式。与MySQL数据库不同,MySQL数据库有表、有字段、有记录,Redis没有这些东西,就是一个名称对应一个值,并

    2024年02月03日
    浏览(29)
  • Elasticsearch 基本使用(三)条件查询

    term 单词查询 对于不分词的字段( 数组 视同普通字段,查询数组字段时,只要匹配上一项就算匹配) 条件直接匹配字段值 对于分词的字段;在字段 倒排索引表,仅限分词结果 内查找条件值 terms 同样是单词查询;但条件值可以是多个值,效果为 term1 or term2 should : [ {term1…

    2024年02月11日
    浏览(37)
  • Elasticsearch的基本功能和使用

    Elasticsearch ,简称为 ES,是一款非常强大的开源的高扩展的分布式全文 检索引擎,可以帮助我们从海量数据中快速找到需要的内容,它可以近乎实时的 存储、检索数据.还可以可以实现日志统计、分析、系统监控等功能. 官网:https://www.elastic.co/cn 例如京东,淘宝,头条等站内搜索功

    2024年01月17日
    浏览(38)
  • Elasticsearch 基本使用(一)写入数据

    my_index :索引名 _doc :文档类型,现在只有一个类型,都是_doc 1 :文档id(PUT时,必须,POST时不是必须) PUT 为修改操作; 必须指定文档id POST 为保存操作; 指定id时,以该id保存;id存在则修改,不存在则新增。 未指定id时,直接新增,并随机生成一个id。 写入数据时,如果

    2024年02月10日
    浏览(46)
  • 【中间件】ElasticSearch:ES的基本概念与基本使用

    Index索引、Type类型,类似于数据库中的数据库和表,我们说,ES的数据存储在某个索引的某个类型中(某个数据库的某个表中),Document文档(JSON格式),相当于是数据库中内容的存储方式 MySQL:数据库、表、数据 ElasticSearch:索引、类型、文档 ElasticSearch的检索功能基于其倒

    2024年02月04日
    浏览(41)
  • Elasticsearch 基本使用(二)简单查询 & 嵌套查询

    按id查询单条记录 查询所有数据 默认只查询10条记录 设置分页条件 设置排序 两种设置方式 注意:_id 为字符串,其排序方式为按位比较,并非数值大小 filter 过滤 在 bool 查询内,可以使用 filter 对数据进行过滤。 单从最终数据来看,filter 也是用于过滤数据,用于条件查询。

    2024年02月03日
    浏览(31)
  • ElasticSearch与Kibana基本概念和使用

    目录 一、什么是elasticsearch? 二、什么是kibana? 三、elasticsearch的优点 四、elasticsearch怎么实现查询的? 五、引入:正向索引、倒排索引 5.1 概念 5.2、优缺点:  六、es的概念 6.1、文档和字段 6.2、索引和映射 七、索引库操作 7.1、mapping映射属性  7.2、索引库操作 7.3、 文档操

    2023年04月19日
    浏览(30)
  • ElasticSearch在Java中的基本使用方式

    索引创建 索引查询 删除索引 插入一条数据 获取一条ID的数据 更新一条数据 删除一条数据 批量新增 批量删除 全量查询 分页查询 排序查询 模糊查询 聚合查询 高亮查询 分组查询 条件查询,查询结果包含和不包含某些字段 多条件查询

    2024年02月21日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包