Elasitcsearch基础学习笔记(1)

一.基本概念

数据的分类

        1.结构化数据:指具有固定格式或有限⻓度的数据,如数据库,元数据等。 对于结构化数据,我们⼀般都是可以通过关系型数据库(mysql,oracle等)的 table 的⽅ 式存储和搜索,也可以建⽴索引。通过b-tree等数据结构快速搜索数据。

        2.⾮结构化数据:全⽂数据,指不定⻓或⽆固定格式的数据,如邮件,word⽂档等。 对于⾮结构化数据,也即对全⽂数据的搜索主要有两种⽅法:顺序扫描法,全⽂搜索法。

全⽂搜索

对⾮结构化数据进行信息提取出来,重新组织,使其变得有⼀定结构,然后对这些有⼀定结构的数据进⾏搜索,从⽽达到搜索相对较快的⽬的。这 种⽅式就构成了全⽂搜索的基本思路。这部分从⾮结构化数据中提取出的然后重新组织的信 息,我们称之索引。

什么是全⽂搜索引擎?

⼯作原理:是计算机索 引程序通过扫描⽂章中的每⼀个词,对每⼀个词建⽴⼀个索引,指明该词在⽂章中出现的次数和位 置,当⽤户查询时,检索程序就根据事先建⽴的索引进⾏查找,并将查找的结果反馈给⽤户的。

搜索引擎主要有 :Lucene 、Solr 、Elastic search。

适合全⽂索引引擎的场景

搜索的数据对象是⼤量的⾮结构化的⽂本数据。

⽂本数据量达到数⼗万或数百万级别,甚⾄更多。

⽀持⼤量基于交互式⽂本的查询。 需求⾮常灵活的全⽂搜索查询。

对安全事务,⾮⽂本数据操作的需求相对较少的情况。

Elasticsearch Elasticsearch是⼀个开源,是⼀个基于Apache Lucene库构建的Restful搜索引擎.

主要功能:分布式搜索 数据分析 分组和聚合

应⽤场景:维基百科 Stack Overflow GitHub 电商⽹站 ⽇志数据分析 商品价格监控⽹站 BI系统 站内搜索 篮球论坛

二.Elasticsearch基本目录介绍及大概结构

索引(index):⼀个索引可以理解成⼀个关系型数据库。

 类型(type): ⼀种type就像⼀类表,⽐如user表,order表。 注意: ES 5.x中⼀个index可以有多种type。 ES 6.x中⼀个index只能有⼀种type。 ES 7.x以后已经移除type这个概念。

映射(mapping) :mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构。 ⽂档(document) ⼀个document相当于关系型数据库中的⼀⾏记录。

字段(field) :相当于关系型数据库表的字段 集群(cluster) 集群由⼀个或多个节点组成,⼀个集群有⼀个默认名称"elasticsearch"。

节点(node) :集群的节点,⼀台机器或者⼀个进程。

分⽚和副本(shard) :副本是分⽚的副本。分⽚有主分⽚(primary Shard)和副本分⽚(replica Shard)之分。 ⼀个Index数据在物理上被分布在多个主分⽚中,每个主分⽚只存放部分数据。 每个主分⽚可以有多个副本,叫副本分⽚,是主分⽚的复制。

        elasticsearch使⽤RESTful⻛格api来设计的:RESTful是⼀种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。

 三.ES基本使用

1.索引的介绍和使⽤

新增索引:PUT "localhost:9200/nba"

获取索引:GET "localhost:9200/nba"

删除索引:DELETE "localhost:9200/nba"

批量获取索引:GET "localhost:9200/nba,cba"

获取所有索引:GET "localhost:9200/_all"   GET "localhost:9200/_cat/indices?v"

2.映射的介绍和使⽤

新增映射 PUT "localhost:9200/nba/_mapping"

{ "properties": { "name": { "type": "text" }, "team_name": { "type": "text" }, "position": { "type": "keyword" }, "play_year": { "type": "keyword" }, "jerse_no": { "type": "keyword" 响应 获取 请求 响应 批量获取 请求 } } }

获取映射 GET "localhost:9200/xdclass/_mapping"

批量获取:GET "localhost:9200/nba,cba/mapping"

获取所有:1.X GET "localhost:9200/_mapping";2.GET "localhost:9200/_all/_mapping"

修改映射:PUT "localhost:9200/nba/_mapping"

{
 "properties": {
 "name": {
 "type": "text"
 },
 "team_name": {
 "type": "text"
 },
 "position": {
 "type": "keyword"
 },
 "play_year": {
 "type": "keyword"
 },
 "jerse_no": {
 "type": "keyword"
 },
 "country": {
 "type": "keyword"
 }
 }
}

3.⽂档的增删改查

新增⽂档:1.PUT localhost:9200/nba/_doc/1 (指定id) 注:指定需要用PUT

                  2.POST localhost:9200/nba/_doc (不指定id)  不需要指定

{ "name":"库⾥", "team_name":"勇⼠", "position":"组织后卫", "play_year":"10", "jerse_no":"30" }

查看⽂档:GET localhost:9200/nba/_doc/1

查看多个⽂档:1.POST localhost:9200/_mget

{"docs" : [ { "_index" : "nba", "_type" : "_doc", "_id" : "1" }, { "_index" : "nba", "_type" : "_doc", "_id" : "2" } ] }

2.POST localhost:9200/nba/doc/mget

{ "docs" : [ { "_id" : "1" }, { "_id" : "2" } ] }

3.GET localhost:9200/nba/doc/mget

{ "ids" : ["1", "2"] }

修改⽂档: POST localhost:9200/nba/_update/1

{ "doc": { "name": "哈登", "team_name": "⽕箭", "position": "双能卫", "play_year": "10", "jerse_no": "13" } }

向_source字段,增加⼀个字段:POST localhost:9200/nba/_update/1

{ "script": "ctx._source.age = 18" }

从_source字段,删除⼀个字段:POST localhost:9200/nba/_update/1

{ "script": "ctx._source.remove(\"age\")" }

根据参数值,更新指定⽂档的字段:POST localhost:9200/nba/_update/1

{ "script": { "source": "ctx._source.age += params.age", "params": { "age": 4 } } }

upsert 当指定的⽂档不存在时,upsert参数包含的内容将会被插⼊到索引中,作为⼀个 新⽂档;如果指定的⽂档存在,ElasticSearch引擎将会执⾏指定的更新逻辑。

POST localhost:9200/nba/_update/3

{ "script": { "source": "ctx._source.allstar += params.allstar", "params": { "allstar": 4 } }, "upsert": { "allstar": 1 } }

删除⽂档:DELETE localhost:9200/nba/_doc/1

未完待续......

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值