Elasticsearch连续剧之基础篇

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch是一个全文检索服务器,全文检索是一种非结构化数据的搜索方式,通过建立倒排索引加快搜索效率;程序员Shay基于Lucene开发了开源项目 Elasticsearch,其本质上是一个java语言开发的web项目,我们可以通过RESTful风格的接口访问该项目内部的Lucene,从而让全文搜索变得简单(所有的请求都忽略ip地址:端口号)。

一、前言

Elasticsearch是一个全文检索服务器,全文检索是一种非结构化数据的搜索方式,通过建立倒排索引加快搜索效率;程序员Shay基于Lucene开发了开源项目 Elasticsearch,其本质上是一个java语言开发的web项目,我们可以通过RESTful风格的接口访问该项目内部的Lucene,从而让全文搜索变得简单(所有的请求都忽略ip地址:端口号)。

二、Elasticsearch数据结构

tips:Elasticsearch7以后,删除了type的概念

  • 文档(Document):文档是可被查询的最小数据单元,一个Document 就是一条数据。类似于关 系型数据库中的记录(一行)的概念。
  • 索引(Index):索引是多种类型文档的集合,类似于关系型数据库中的库的概念。
  • 域(Filed):文档由多个域组成,类似于关系型数据库中的字段的概念。

三、安装

1.配置最大可创建文件数大小

#打开系统文件:
vim /etc/sysctl.conf
#添加以下配置:
vm.max_map_count=655360
#配置生效:
sysctl -p

2.由于ES不能以root用户运行,我们需要创建一个非root用户,此处创建一个名为es的用户

#创建用户:
useradd es

3.安装es

#解压:
tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz
#重命名:
mv elasticsearch-7.17.0 elasticsearch1
#移动文件夹:
mv elasticsearch1 /usr/local/
#es用户取得该文件夹权限:
chown -R es:es /usr/local/elasticsearch1

4.启动es服务

#切换为es用户:
su es
#进入ES安装文件夹:
cd /usr/local/elasticsearch1/bin/
#启动ES服务:
./elasticsearch
#查询ES服务是否启动成功
curl 127.0.0.1:9200

安装完es之后,还需要有一个kibana可视化平台,方便对es索引进行搜索和,查看,交互。该平台安装步骤在下面的链接,有兴趣可以查看。

kibana安装链接

四、常用操作

1.创建没有结构的索引

请求方式:PUT

PUT /student

*为索引添加结构

#基本格式
POST /索引名/_mapping
{
    "properties":{
    "域名1":{
    "type":域的类型,
    "store":是否存储,
    "index":是否创建索引,
    "analyzer":分词器
    },
    "域名2":{
    ...
    }
  }
}
eg:
POST /student/_mapping
{
  "properties":{
    "id":{
      "type":"integer"
    },
    "name":{
      "type":"text"
    },
    "age":{
      "type":"integer"
    }
  }
}

2.创建有结构的索引

只有index设置为true,才能为该域的数据创建索引

mappings:映射是用来定义一个文档,和其包含的字段,是如何存储和索引的过程。

类型:1.properties /fields:一份映射类型包含字段列表或者文档的相关属性。

PUT /索引名
{
    "mappings":{
        "properties":{
            "域名1":{
                "type":域的类型,
                "store":是否单独存储,
                "index":是否创建索引,
       "analyzer":分词器
           },
            "域名2":{
                ...
           }
        }
   }
}
eg:
#创建有结构的索引
PUT /student1
{
  "mappings": {
    "properties": {
      "id": {
        "type": "integer"
      },
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      }
    }
  }
}

3.删除索引

DELETE /索引名
eg:
DELETE /student1

4.文档操作

前面的创建的索引(有结构)相当于数据库创建了一张表,这里的文档操作相当于给数据表添加了一行或几行数据

4.1添加或修改

当id值存在时就是修改,否则就是一个新增id值不写则自动生成

POST /索引/_doc/[id值]
{
 "field名":field值
}
eg:
POST /student/_doc/1
{
  "id":1,
  "name":"itbz",
  "age":10
}

4.2根据id查询文档

GET /索引/_doc/id值
eg:
#查询文档
GET /student/_doc/1

4.3根据id批量查询文档

GET /索引/_mget
{
    "docs":[
       {"_id":id值},
       {"_id":id值}
   ]
}
eg:
#批量请求
GET /student/_mget
{
  "docs": [
    {
      "_id": 1
    },
    {
      "_id": 2
    }
  ]
}

4.4查询所有文档

query: 在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询 条件匹配的有多好(与查询的条件有多吻合).

GET /索引/_search
{
   "query": {
       "match_all": {}
   }
}
eg:
#查询所有文档
GET /student/_search
{
  "query": {
    "match_all": {}
  }    
}

4.5修改文档部分字段

POST /索引/_doc/id值/_update
{
    "doc":{
        域名:值
 }
}
eg:
POST /student/_doc/1/_update
{
    "doc":{
        "name":"shangxuetang"
    }
}

4.6删除文档

DELETE /索引/_doc/id值
eg:
#删除
DELETE /student/_doc/1
  • Elasticsearch在执行删除操作时,ES先标记文档为delete为delete状态,等ES存储空间不足或者工作空闲的时候再执行物理删除
  • 修改文档操作时,ES不会真的修改Document中的数据,而是标记ES中原有的文档为deleted状态,再创建一个新的文档来存储数据(先删除后修改)

5.域的属性

5.1 index

**该域是否创建索引。只有值设置为true,才能根据该域的关键词查询文档。**

eg:
PUT /student1
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "index":true
      }
    }
  }
}
// 根据关键词查询文档
GET /索引名/_search
{
 "query":{
        "term":{
 搜索字段: 关键字
 }
   }
}
eg:
GET /student1/_search
{
  "query": {
    "term": {
      "name": "love"
    }
  }
}

5.2 type 域的类型

keyword类型:如果使用该类型,只能根据整体来查到

5.3 store 存储

设置是否单独存储。如果设置为true,则该域能单独查询。(本来可以字段都是存在_source,设置store属性为true,那么有一个单独的存储空间为这个字段做存储,而且这个存储是独立于source的存储的。)

// 单独查询某个域:
GET /索引名/_search
{
  "stored_fields": ["域名"]
}
eg:
GET /student1/_search
{
  "stored_fields": ["name"]
}
  • 使用场景:该属性访问比较频繁。
  • 使用store存储字段field会占用磁盘空间。如果需要从文档中提取(即在脚本中和聚合)它会帮助减少计算。在聚合时具有store属性的字段会比不具有这个属性的字段快。
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
4月前
|
自然语言处理 安全 关系型数据库
|
缓存 搜索推荐 Java
Elasticsearch 零基础入坑指南
Elasticsearch 零基础入坑指南
Elasticsearch 零基础入坑指南
|
SQL JSON 关系型数据库
白日梦的Elasticsearch系列笔记(一)基础篇-- 快手上手ES (二)
白日梦的Elasticsearch系列笔记(一)基础篇-- 快手上手ES (二)
181 0
|
JSON 缓存 监控
白日梦的Elasticsearch系列笔记(一)基础篇-- 快手上手ES (三)
白日梦的Elasticsearch系列笔记(一)基础篇-- 快手上手ES (三)
192 0
|
存储 SQL JSON
白日梦的Elasticsearch系列笔记(一)基础篇-- 快手上手ES (一)
白日梦的Elasticsearch系列笔记(一)基础篇-- 快手上手ES (一)
355 0
|
SQL 关系型数据库 MySQL
干货 | 通透理解Elasticsearch聚合
使用Elasticsearch的过程中,除了全文检索,或多或少会做统计操作,而做统计操作势必会使用Elasticsearch聚合操作。 类似mysql中group by的terms聚合用的最多,但当遇到复杂的聚合操作时,往往会捉襟见肘、不知所措… 这也是社区中聚合操作几乎每天都会被提问的原因。 本文基于官方文档,梳理出聚合的以下几个核心问题,目的:将Elasticsearch的聚合结合实际场景说透。
276 0
干货 | 通透理解Elasticsearch聚合
|
存储 索引
干货 | Elasticsearch 趋势科技实战分享笔记
Elasticsearch 最少必要知识实战教程直播回放 1、Elasticsearch 索引的设计 1.1 单一索引还是基于时间的索引?
116 0
干货 | Elasticsearch 趋势科技实战分享笔记
|
存储 数据可视化 搜索推荐
如何做一次Elasticsearch技术分享?
如何做一次Elasticsearch技术分享?
145 0
如何做一次Elasticsearch技术分享?
|
存储 机器学习/深度学习 自然语言处理
Elasticsearch生态&技术峰会 | Elasticsearch在企查查的应用实践
开源最大的特征就是开放性,云生态则让开源技术更具开放性与创造性,Elastic 与阿里云的合作正是开源与云生态共生共荣的典范。值此合作三周年之际,我们邀请业界资深人士相聚云端,共话云上Elasticsearch生态与技术的未来。
3096 0
Elasticsearch生态&技术峰会 | Elasticsearch在企查查的应用实践
|
搜索推荐 Java Apache
领课教育开源系统-Elasticsearch的安装和使用
Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
1305 0
领课教育开源系统-Elasticsearch的安装和使用