ElasticSearch

本文详细介绍了ElasticSearch(ES)的基本概念,包括其与Lucene的区别,为何选择ES,以及它在分布式环境中的优势。文章还对比了ES与Sorl的特性,并解释了ES中的关键术语如index、type、document等。此外,提供了ES的安装指南,包括如何使用Kibana进行界面操作,以及IK分词器的配置方法。通过具体的API示例,展示了文档的增删改查、批量操作和查询技巧。最后,探讨了ES在集群环境下的应用,以应对单节点的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ElasticSearch(ES)认识

1.是什么

ES和Lucene一样,

  • 都可以进行全文搜索(创建索引,搜索索引),
  • ES会启动服务,Lucene只是一个工具包,
  • ES可以在分布式环境中使用。

2.为什么使用

  • 数据库模糊查询效率低
  • 文本数据没有相关度排序
  • 没有摘要截取
  • 查询结果关键字没有高亮显示
  • 相比Lucene优点
    1. 支持分布式
    2. 支持多种语言,非java亦可
    3. Restful风格设计,调用简单

3.同类型比较

  • Sorl
    比Sorl在实时搜索上做得更好,只支持JSON格式,轻量级。Sorl可以支持更多格式。

4.ES中的一些术语

  1. index(索引库)
    对应数据库
  2. type(文档类型)
    对应数据库表
  3. document(文档)
    对应表中一行数据
  4. field(列)
    对应表中字段
  5. node(节点)
    一个节点是一个ES实例
  6. shard(分片)
    一个节点数据达到容量上限时可以使用shard,将index分为多个分片(默认一个分片),一个或者多个node共同存储该index上的数据(类似数据库分表),实现数据的水平扩展
  7. replicas(副本)
    相当于shard的备份。即primary shard和replica shard构成主从关系。

2.安装使用ES

1.下载ES即使用

  • es官网
  • 解压打开bin/elasticsearch.bat即可
  • 访问: http://localhost:9200

2.下载Kibana5进行界面操作ES

  • kibana下载地址
  • 点击bin/kibana.bat启动
  • 访问:http://localhost:5601
  • 下载IK分词器https://github.com/medcl/elasticsearch-analysis-ik,放到es/plugins中,需要新建一个文件夹装IK分词器
  • 在Dev Tools中使用
POST _analyze
{
  "analyzer":"ik_max_word",
  "text":"中国驻洛杉矶领事馆遭亚裔男子枪击嫌犯已自首"
}

#新增 
PUT crm/employee/1
{
  "id":1,
  "name":"老子"
}

#新增,不指定id,自己生成一个id,需要shiy使用Post方法
POST crm/employee/
{
  "id":1,
  "name":"老子"
}

#查询
GET crm/employee/1

#查询所有 
GET _search

#修改(全局 )
POST crm/employee/1
{
  "id":1,
  "name":"老头子 "
}

#局部修改 
POST crm/employee/1/_update
{
  "doc":{
    "name":"小孩子"
  }
}

#删除
DELETE crm/employee/1

#获取所有
GET _search

#1.仅查询文档内容
GET crm/employee/1/_source

#2.查询文档内容中的某个字段
GET crm/employee/1/_source?_source=name

#3.批量bulk(一次执行多个操作,仅请求一次)
#{action:{metadata}\n
#{requestbody}\n
#新增
POST _bulk
{"create":{"_index":"crm","_type":"employee","_id":555}}
{"id":555,"name":"小黑"}
{"create":{"_index":"crm","_type":"employee","_id":666}}
{"id":666,"name":"小王"}
#课件上的bulk
POST _bulk
{ "delete": { "_index": "itsource", "_type": "employee", "_id": "123" }}
{ "create": { "_index": "itsource", "_type": "blog", "_id": "123" }}
{ "title": "我发布的博客" }
{ "index": { "_index": "itsource", "_type": "blog" }}
{ "title": "我的第二博客" }

#4.批量获取
#不同库
GET _mget
{
  "docs":
  [
    {
    "_index":"crm",
    "_type":"employee",
    "_id":555
    },
    {
      "_index":"itsource",
      "_type":"blog",
      "_id":123,
      "_source":["title"]
    }
  ]
}
#相同库
GET crm/employee/_mget
{
  "ids":[222,555,666]
}

#5.字符串查询
#分页查询
GET crm/employee/_search?from=0&size=7
#查询条件
GET crm/employee/_search?q=id:1

#6.DSL的查询与过滤
PUT sky/cloud/1
{
  "id":1,
  "name":"仅仅3片白云",
  "num":3,
  "place":"天府新谷"
}
PUT sky/cloud/2
{
  "id":2,
  "name":"仅仅2片白云",
  "num":2,
  "place":"红牌楼"
}
PUT sky/cloud/3
{
  "id":3,
  "name":"仅仅3片白云",
  "num":3,
  "place":"天府新谷"
}
PUT sky/cloud/4
{
  "id":4,
  "name":"仅仅3片白云",
  "num":3,
  "place":"天府新谷"
}
PUT sky/cloud/5
{
  "id":5,
  "name":"仅仅5片白云",
  "num":5,
  "place":"金牛区"
}
PUT sky/cloud/6
{
  "id":6,
  "name":"仅仅6片白云",
  "num":6,
  "place":"天府新谷"
}
PUT sky/cloud/7
{
  "id":7,
  "name":"仅仅1片乌云",
  "num":1,
  "place":"天府新谷"
}
PUT sky/cloud/8
{
  "id":8,
  "name":"仅仅8片白云",
  "num":8,
  "place1":"天府新谷"
}

GET sky/cloud/_search 

#查询 白云 天府新谷 数量>=1,<=8 从第一条开始,每页5条
GET sky/cloud/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "白云"
          }
        }
      ],
      "filter": [
        {
          "term": {
            "place": "天府新谷"
          }
        },
        {
          "range": {
            "num": {
              "gte": 1,
              "lte": 8
            }
          }
        }
      ]
    }
  },
  "from": 1,
  "size": 5,
  "_source": [
    "name",
    "num",
    "place"
  ],
  "sort": [
    {
      "num": "desc"
    }
  ]
}

#7.映射
#创建
DELETE _all
GET _search
GET _mapping
PUT sky
{
  "mappings": {
    "cloud":{
      "properties": {
        "id":{
          "type":"long"
        },
        "name":{
          "type": "text",
          "analyzer": "ik_smart",
          "search_analyzer": "ik_smart"
        },
        "num":{
          "type": "integer"
        },
        "place":{
          "type": "keyword"
        }
      }
    }
  }
}

#8.创建索引
PUT shopping
{
	"settings":{
		"number_of_shards":5,
		"number_of_replicas":1
	}
}
GET shopping/_search

#查看节点信息
GET _cat/nodes?v

GET _cat/indices?v

3.ElasticSearch的集群

  • 为什么集群
    一台ES节点,可能出现故障宕机,可能承受不住并发压力,可能存储不了大量数据,所以需要使用集群来解决这样的一些问题
  • ElasticSearch的节点类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值