Elasticsearch 分布式搜索引擎

1、什么是Elasticsearch

能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。

2、数据格式

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elastic s earch 里 存储 文档 数据和关系型数据库 MySQL 存储数据的概念进行一个类比

索引(Index)

ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。

类型(Type)

类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。

文档(Document)

文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个或多个域(Field)组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。

域(field)

文档由多个域组成,不同的文档里面同名的域一定具有相同的数据类型。文档里面域可以重复出现,也就是一个field会有多个值,即multivalued。

映射(Mapping)

存储域field的相关映射信息,不同type会有不同的mapping。

ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成语汇单元(token)、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。

大致可以认为Index就是一个db,document type就是一个table,document就是一行数据,field就是table的column,mapping就是table的定义。

3、基本概念

4、Elasticsearch特点

  • 分布式文件存储
  • 实时分析的分布式搜索引擎。
  • 高可拓展性。
  • 可插拔的插件支持。

5、Elasticsearch功能

  • 数据搜集
  • 数据分析
  • 数据存储

6、操作ES

1.创建索引

POST /索引名称/类型名称

{

"mapping":{

"properties":{

"列名":{

"type":"数据类型"

},

"列名":{

"type":"数据类型"

}

}

}

}

-------支持的数据类型

text:文本类型

integer float,都变了,long....数字类型

date:日期类型

6.1新建索引


PUT /lfkj123
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
      "age":{
        "type":"integer"
      }
    }
  }
}

---------------------------------新建索引成功---------------------------------
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "lfkj123"
}

6.2删除索引

DELETE /aaa
-----------------------------
{
  "acknowledged" : true
}

6.3查看ES中所有索引

GET /_cat/indices?v
**********************************
health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .apm-custom-link                1icaoHiJRU6b1Fe2II8lpg   1   0          0            0       208b           208b
yellow open   ddd                             D0H7Dn0dS8iupk_XcDT1Lw   1   1          1            0      8.1kb          8.1kb
green  open   .kibana-event-log-7.13.4-000001 i-0FgnYISWSI8O8IWWiYxw   1   0         17            0     45.5kb         45.5kb
green  open   .apm-agent-configuration        LW6vt4WPRYW_fLVNRYNDng   1   0          0            0       208b           208b
green  open   .kibana_7.13.4_001              GE-5sU0ORwmip9zG1AJCfw   1   0         54           12      2.1mb          2.1mb
yellow open   lfkj123                         RzoK-kFNQqq2a87LvbE6kQ   1   1          0            0       208b           208b
green  open   .kibana_task_manager_7.13.4_001 OB6dqsdIQ6uUn67_MeX4TQ   1   0         10         1247    340.1kb        340.1kb
yellow open   lfkjoa_es                       klDWhWy4Qu27wS-xPxh4Mg   1   1        205            0    171.7kb        171.7kb
green  open   .tasks                          SPU6znxaQZKINkN-BydH2Q   1   0         30            0       56kb           56kb

6.4查看索引结构

GET /lfkj123
------------------------------------------
{
  "lfkj123" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "name" : {
          "type" : "text"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "lfkj123",
        "creation_date" : "1685586982631",
        "number_of_replicas" : "1",
        "uuid" : "RzoK-kFNQqq2a87LvbE6kQ",
        "version" : {
          "created" : "7130499"
        }
      }
    }
  }
}

6.5添加文档---记录

1.如果添加时指定了id值


PUT /lfkj123/_doc/1
{
  "name":"刘德华",
  "age":18
}
-------结果-------------------
{
  "_index" : "lfkj123",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

2.添加时不指定id的值


POST /lfkj123/_doc
{
  "name":"成龙",
  "age":21
}
-----------------结果--------------
{
  "_index" : "lfkj123",
  "_type" : "_doc",
  "_id" : "D3fudIgBlSOp2xX04qqX",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

6.6查询文档---跟进id查询

GET /lfkj123/_doc/1
--------------结果---------
{
  "_index" : "lfkj123",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "刘德华",
    "age" : 18
  }
}

6.7删除文档

DELETE /lfkj123/_doc/1
-------------------------------------
{
  "_index" : "lfkj123",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

6.8修改文档

第一种修改 指明索引列 如果不指定某些列,则这些列会在索引中丢失

PUT /lfkj123/_doc/1
{
  "name":"哇哇哇哇",
	"age":28
}


PUT /lfkj123/_doc/1
{
  "name":"哇哇哇哇"
}
-------------------------------------
{
  "_index" : "lfkj123",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 3,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 5,
  "_primary_term" : 1
}

第二种 修改部分列

POST /lfkj123/_doc/3/_update
{
  "doc":{
    "age":55
  }
}

6.8文档查询

GET /lfkj123/_doc/_search?q=name:刘&q=age:55
--------------------------------------------------
#! [types removal] Specifying types in search requests is deprecated.
{
  "took" : 109,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.8480702,
    "hits" : [
      {
        "_index" : "lfkj123",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 0.8480702,
        "_source" : {
          "name" : "刘备",
          "age" : 55
        }
      }
    ]
  }
}

6.9查询时传递json参数

#按名字查match(匹配)
GET /lfkj123/_doc/_search
{
  "query":{
    "match":{
      "name":"刘"
    }
  }
}

#按年龄查询range(范围)
GET /lfkj123/_doc/_search
{
  "query":{
    "range":{
      "age":{
        "gt":10,
        "lt":30
      }
    }
  }
}
-----------------------------------------------

6.10查询部分列

GET /lfkj123/_doc/_search
{
  "query":{
    "range":{
      "age":{
        "gt":10,
        "lt":30
      }
    }
  },
  "_source":["name"]
}

6.11查询时按照某个字段排序

GET /lfkj123/_doc/_search
{
  "query":{
    "range":{
      "age":{
        "gt":10,
        "lt":30
      }
    }
  },
  "_source":["name"],
  "sort":{
    "age":{
      "order":"asc"
    }
  }
}

6.12查询分页

GET /lfkj123/_doc/_search
{
  "query":{
    "range":{
      "age":{
        "gt":10,
        "lt":60
      }
    }
  },
  "_source":["name"],
  "sort":{
    "age":{
      "order":"asc"
    }
  },
  "from":1,
  "size":1
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值