Elasticsearch简介

前言

什么是搜索引擎

  • 搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上采集信息,在对信息进行组织和处理后,为用户提供检索服务,将检索的相关信息展示给用户的系统。
  • 分类:
    • 全文索引搜索引擎
      • 采集ip段内的网页数据,扫描网页内容的每一个词,对其创建索引,指明词频、位置,存入数据库,当用户以关键词查找信息时,搜索引擎会在数据库中,根据关键词的匹配程度、出现的位置、频次等算法,匹配结果一般按照关联度降序返回
      • 比如百度、必应、谷歌、搜狗等
    • 目录索引搜索引擎
      • 对网站进行人工分类,所以目录索引也被称为分类检索;
      • 在爬取数据时,将网页根据一定的目录进行分门别类,类似图书馆一样分为:汽车、机械、植物、历史等
      • 用户检索时,可以先依据分类缩小检索范围,比如你在新浪网首页,选择了房产->二手房
    • 垂直搜索
      • 垂直搜索引擎适用于有明确搜索意图情况下进行检索。
      • 也可以理解为单个(少量)行业专用搜索
      • 例如各大电商(商品)、携程(机票、车票、住宿)等

什么是Elasticsearch

Elasticsearch is a distributed search and analytics engine, scalable data store, and vector database built on Apache Lucene. It’s optimized for speed and relevance on production-scale workloads. Use Elasticsearch to search, index, store, and analyze data of all shapes and sizes in near real time.

Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。

  • 应用场景
    • 海量数据搜索场景。
    • 日志处理和分析,例如:通过ELK搭建日志处理和分析方案。
    • 地理空间数据搜索,例如:查询5km以内店铺、统计一个月内某个用户去过哪些地方(点)。

什么是Lucene

  • Lucene是一个开放源代码的全文检索引擎工具包
  • 它提供了一个简单但强大的应用编程接口(API),通过API可以对各种信息资源(如:文本文件、电子邮件、数据库等)实现快速的全文检索功能。
  • Lucene由JAVA语言开发,索引可以很容易地,嵌入到使用Java开发的应用程序中。
  • 但是为什么不直接使用Lucene进行开发呢,因为整个体系太难了😄,ES相当于对Lucene进行了封装及扩展。

Elasticsearch 存储结构

基本概念介绍过程中,会用到 [索引]这个词,有两种语境:

  1. 名词,比如创建索引,意思是创建类似于关系型数据库中的一张表
  2. 动词,比如索引文档,在官方描述中,跟创建、删除一样是写操作,同更新语义
  • Document:文档

    • Elasticsearch是面向文档的数据库,文档是最基本的存储单元,也是可以被索引的最小单位,文档类似mysql表中的一行数据。
    • 简单的说在ES中,文档指的就是一条JSON数据。
    • Elasticsearch中文档使用json格式存储,因此存储上比Mysql要灵活的多,Elasticsearch支持任意格式(java中的单层对象、嵌套对象)的json数据。
  • Index:索引

    • 在Elasticsearch中,索引(Index)即是文档(Document)的容器/集合
    • 在7.0以前,同一个索引可以存储不同的数据类型(Type),这时索引理解时,可以参考为mysql中的数据库;
    • 但是生产环境中,一个索引建议只存储一种数据结构,所以索引也可以被理解为mysql中的库表。
  • Type:文档类型

    • 在版本7.0+的Elasticsearch中,已经不使用文档类型了(默认统一使用_doc),在版本7.0-,代表一类文档的集合。
  • Field:文档字段

    • 文档由多个json字段(Field)组成, 这里的字段类似mysql中表的字段。
    • 所以Elasticsearch中的字段,肯定也有类型的,官网目前罗列出32种字段类型, 其中有的又存在更细致的分类;ES字段分类
    • 以下列举几种常用字段类型(关于几何/空间图形运算,可以参考Arcgis的一些说明,Arcgis函数):
ES字段类型
字符串text、keyword
数值long, integer, short, byte, double, float
布尔值boolean
时间date
地理/几何 geoshape、point、linestring、polygon、multipoint
  • mapping :映射
    • Elasticsearch的mapping (映射),与mysql中的表结构相同的点是,都定义了数据机构/组成、字段类型等,不同的是,mapping 还定义了字段使用的分词器、是否评分、是否创建索引等属性。

Elasticsearch基础 CRUD 操作

以下操作都是基于kibana,安装参考上一篇

  • 插入文档
    • 语法:PUT /{index}/{type}/{id}
    • index:索引名
    • type:文档类型,版本7.0+默认_doc
    • id:可指定,不指定时自动生成
PUT /dingsu/_doc/1
{
  "name":"丁宿001",
  "sex": 1
}

search

  • 查询文档
    • 语法: GET /{index}/{type}/{id}
    • 查询所有及该Index详细属性,可以使用API:_search
GET dingsu/_doc/1
GET dingsu/_search
  • 更新文档
    • 如果是全量覆盖,可以使用PUT,也可以使用POST
    • POST需要指明哪个类型,因为7.0-版本以前,可以定义多个Type
    • 单个Field使用POST进行更新
    • 语法: POST /{index}/_update/{id}
# 覆盖
PUT /dingsu/_doc/1
{
  "name":"丁宿002",
  "sex": 1
}
# 局部更新
POST /dingsu/_update/1
{
  "doc": {
     "name":"丁宿003"
  }
 
}
  • 删除文档:
    • 语法:DELETE /{index}/{type}/{id}
DELETE dingsu/_doc/1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁宿

新手,让我看看1分钱长啥样

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值