ElasticSearch 快速上手教程 (三) —— 基本操作

前言

安装完 ES 、并了解完 ES 的相关概念后,这篇文章我们来深入学习一下 ES 的基本操作。ES 就像一个数据库,我们把数据存储在 ES 当中,在需要用的时候在进行查询。你也许会问,那么为什么不使用 MySQL 进行数据的存储与查询呢?因为 MySQL 使用 LIKE 这样的关键字进行搜索,通常这是低效的,而且没办法满足我们的多字段搜索需求;而 ES 则是利用了倒排索引的方法,将搜索的关键字与数据进行关联,让我们可以快速检索到数据。下面我们开始来如何使用 ES 存储和搜索数据之旅。

数据的存储与搜索

ES 存储的基本单位是文档(Document),文档是存储在索引(index)当中的,一个索引当中通常会包含多份文档,ES 当中可以存储多个索引,索引就是具有相同特性的文档的集合:比如公司人员的信息的索引、商品信息的索引等。以图书馆的书籍的存储与检索为例:每本书的信息用一个文档进行表示,多本书的话就是多份文档,而这些文档存储在哪呢?答案是存在索引当中。所以,刚开始时,我们必须要创建一个索引,才能往里面添加文档。ES 采用 RESTful 风格 API 对数据进行操作,我们可以在 Kibana 中使用相关的命令进行数据的存储与查询。
在这里插入图片描述
以下是一些常用的命令。

获取集群或者节点的信息

# 获取集群的健康信息
GET _cluster/health
# 获取节点状态信息
GET _nodes/stats

索引创建与查询

# 查看所有的索引
GET /_cat/indices?v
# 创建一个索引,用于存储文档
PUT index_name

文档创建、更新、删除

# 添加文档,自动生成主键
POST index_name/_doc
{
  "field": "value"
}
# 添加文档,文档 ID 由用户设置,如果文档存在,则进行覆盖
PUT index_name/_doc/document_id
{
  "field": "value"
}
# 添加文档,如果文档存在,则报错给出提示信息
PUT index_name/_create/document_id
{
  "field": "value"
}
# 更新指定文档对应的字段和内容
POST index_name/_update/document_id
{
  "doc": {
    "field1": "value",
    "field2": "value",
  }
} 
# 删除指定文档
DELETE index_name/_doc/id

文档的搜索与查询

  • 简单查询
# 根据文档id读取索引中的文档
GET index_name/_doc/document_id
# 根据区间查询
GET index_name/_search
{
  "query": {
    "match": {
      "field": {
        "gte": "lowest value",
        "lte": "highest value"
      }
    }
  }
}
# 全文搜索,会对 search terms 进行分词,根据分词找到匹配的数据
GET index_name/_search
{
  "query": {
    "match": {
      "field": {
        "query": "search terms"
      }
    }
  }
}
# 短语搜索,将短语当成一个整体进行完全匹配,比如匹配商品的标签
GET index_name/_search
{
  "query": {
    "match_phrase": {
      "field": {
        "query": "search phreas"
      }
    }
  }
}

解释一下什么是分词:ES中的分词指将文本文档划分成一个一个的词条(Term)或符号的过程。分词的主要作用是将文本分割成词条,进行倒排索引,以供搜索。如下面使用 ik 分词器进行分词的结果:

在这里插入图片描述

  • 组合查询
# Bool Query
- must: defines all queries(criteria) a document MUST match to be returned as hits
返回所有条件都符合的搜索结果:必需要符合条件1和条件2...
GET index_name/_search
{
  "query": {
    "bool": {
      "must": [
        {
        "match_phrase": {
          "field1": "value"
         }
        },
        {
          "match": {
            "field2": "value"
          }
        }
      ]
    }
  }
}
- must_not: defines queries(criteria) a document MUST NOT match to be included in the search results
符合某种条件的结果不返回
GET index_name/_search
{
  "query": {
    "bool": {
      "must": {
        "match_phrase": {
          "field1": "value"
         }
        },
       "must_not":[  # 符合这个条件的结果不返回
         {
          "match": {   
            "field2": "value"
          }
        }
      ]
    }
  }
}
- should: "nice to have" queries(criteria)
符合条件的结果会有更高的得分,会展示在搜索结果的更前面
GET news_headlines/_search
{
  "query": {
    "bool": {
      "must": [
        {
        "match_phrase": {
          "field1": "value"
          }
         }
        ],
       "should":[
         {
          "match_phrase": {
            "field2": "value"
          }
        }
      ]
    }
  }
}
- filter: 过滤符合条件的结果
GET news_headlines/_search
{
  "query": {
    "bool": {
      "must": [
        {
        "match_phrase": {
          "field": "value"
          }
         }
        ],
       "filter":{  # 筛选出符合这个时间区间的结果
          "range":{
             "date": {
               "gte": "begin time",
               "lte": "end time"
          }
        }
      }
    }
  }
}

参考

  • https://www.knowi.com/blog/what-is-elastic-search/
  • https://www.elastic.co/guide/en/elasticsearch/reference/6.0/getting-started.html

个人博客:https://www.kangpeiqin.top
欢迎与我交流,关注公众号(sunny的技术小屋),获取更多技术相关知识

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值