elasticsearch基础

elasticsearch基础

基础概念

elasticsearch中的文档数据会被序列化为json格式后存储在elasticsearch中。

索引(index):相同类型的文档的集合

映射(mapping):索引中文档的字段约束信息,类似表的结构约束

文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式

字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)

DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

文档和词条?

每一条数据就是一个文档 对文档中的内容分词,得到的词语就是词条

正向索引?

于文档id创建索引。根据id查询快,但是查询词条时必须先找到文档,而后判断是否包含词条

倒排索引?

对文档内容分词,对词条创建索引,并记录词条所在文档的id。查询时先根据词条查询到文档id,而后根据文档id查询文档

IK分词器(采用正向迭代最细粒度算法)

中文分词往往需要根据语义分析,比较复杂,这就需要用到中文分词器,例如IK分词器。

分词器的作用是什么?

创建倒排索引时,对文档分词 用户搜索时,对输入的内容分词

IK分词器有几种模式?

ik_smart:智能切分,粗粒度 ik_max_word:最细切分,细粒度IK分词器

如何拓展分词器词库中的词条?

利用config目录的IkAnalyzer.cfg.xml文件添加拓展词典 在词典中添加拓展词条

Mapping映射属性

mapping是对索引库中文档的约束,常见的mapping属性包括:

type:字段数据类型,

常见的简单类型有: 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

数值:long、integer、short、byte、double、float

布尔:boolean

日期:date

对象:object

index:是否创建索引,默认为true

analyzer:使用哪种分词器

properties:该字段的子字段

索引库操作

创建索引库和mapping的请求语法如下:

复制代码
PUT /索引库名称
{
  "mappings": {
    "properties": {
      "字段名":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": "false"
      },
      "字段名3":{
        "properties": {
          "子字段": {
            "type": "keyword"
          }
        }
      },
      // ...略
    }
  }
}

创建索引库

复制代码
PUT /wbn
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart",
        "index": true
      },
      "age":{
        "type": "byte",
        "index": true
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "type": "object",
        "properties": {
          "firstname":{
            "type": "keyword"
          },
          "lastname":{
            "type": "keyword"
          }
        }
      }
    }
  }
}

查询索引库操作

复制代码
GET /wbn

{
  "wbn" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "byte"
        },
        "email" : {
          "type" : "keyword",
          "index" : false
        },
        "info" : {
          "type" : "text",
          "analyzer" : "ik_smart"
        },
        "name" : {
          "properties" : {
            "firstname" : {
              "type" : "keyword"
            },
            "lastname" : {
              "type" : "keyword"
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "wbn",
        "creation_date" : "1729975477550",
        "number_of_replicas" : "1",
        "uuid" : "hiGQDD0BTV-ApQBQpZ5NlQ",
        "version" : {
          "created" : "7120199"
        }
      }
    }
  }
}

删除索引库

复制代码
DELETE /wbn

{
  "acknowledged" : true
}

索引库修改

以上对比添加字段可以修改字段不行。

索引库操作有哪些?

创建索引库:PUT /索引库名

查询索引库:GET /索引库名

删除索引库:DELETE /索引库名

添加字段:PUT /索引库名/_mapping

文档操作

新增文档

复制代码
POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
    // ...
}

POST /wbn/_doc/1
{
  "info":"AAAA超级景区",
  "email":"xxxxx@qq.com",
  "name":
  {
    "firstname":"西",
    "lastname":"安"
  }
}

查询文档

GET /索引库名/_doc/文档id

复制代码
GET /wbn/_doc/1

删除文档

DELETE /索引库名/_doc/文档id

复制代码
DELETE /wbn/_doc/1

修改文档

全量修改:会删除旧文档,添加新文档

格式

复制代码
PUT /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}

样例

复制代码
PUT /wbn/_doc/1
{
   "info":"AAAA超级景区",
  "email":"yyyyyyy@qq.com",
  "name":
  {
    "firstname":"西",
    "lastname":"安"
  }
}

增量修改,修改指定字段值

格式

复制代码
POST /索引库名/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}

样例

复制代码
POST /wbn/_update/1
{
  "doc":{
    "info":"AAAAA兵马俑超级景区1"
  }
   
}

文档操作有哪些?

创建文档:POST /索引库名/_doc/文档id { json文档 }

查询文档:GET /索引库名/_doc/文档id

删除文档:DELETE /索引库名/_doc/文档id

修改文档:

全量修改:PUT /索引库名/_doc/文档id { json文档 }

增量修改:POST /索引库名/_update/文档id { "doc": {字段}}

批量处理

elasticsearch中允许通过一次请求中携带多次文档操作,也就是批量处理,语法格式如下:

复制代码
POST /_bulk
{ "index" : { "_index" : "索引库名", "_id" : "1" } }
{ "字段1" : "值1", "字段2" : "值2" }
{ "index" : { "_index" : "索引库名", "_id" : "1" } }
{ "字段1" : "值1", "字段2" : "值2" }
{ "index" : { "_index" : "索引库名", "_id" : "1" } }
{ "字段1" : "值1", "字段2" : "值2" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

批量新增

复制代码
POST /_bulk
{"index":{"_index":"wbn","_id":2}}
{"info":"AAAA超级景区A","email":"yyyyyyy@qq.com","name":{"firstname":"西", "lastname":"安"}}
{"index":{"_index":"wbn","_id":3}}
{"info":"AAAA超级景区B","email":"ccccccc@qq.com","name":{"firstname":"西", "lastname":"安"}}

批量删除

复制代码
POST /_bulk
{"delete":{"_index":"wbn","_id":2}}
{"delete":{"_index":"wbn","_id":3}}
相关推荐
顧棟22 分钟前
【ES实战】 低版本Elasticsearch(不具备CCR)集群迁移
大数据·elasticsearch·搜索引擎
AIwenIPgeolocation38 分钟前
告别“数据孤岛”:可信数据空间如何打通产业链、城市群?
大数据·人工智能
云上工程笔记1 小时前
四柱记账法和复式记账法有什么区别?复式记账为什么更适合查错和对账
大数据·前端·人工智能
微三云生态系统架构师-彭丹1 小时前
区域拆分独立分红池系统设计:解决大盘分红迟滞的四维拆分引擎
大数据·人工智能
吴佳浩 Alben1 小时前
构建企业级 DevOps 排错 Agent:从日志告警到自动化修复 PR
大数据·人工智能·语言模型·架构·自动化·ai编程·devops
Elastic 中国社区官方博客1 小时前
隐藏在可观测性数据中的安全攻击
大数据·网络·安全·elasticsearch·搜索引擎·全文检索
FII工业富联科技服务2 小时前
三维世界模型驱动机器人操作:概念解析、技术挑战与Omniverse全栈架构深度拆解
大数据·架构·机器人
见闻小天地2 小时前
空调机房冷冻泵与冷却泵是什么?选型要点与赛莱默方案解析
大数据·网络
国科安芯2 小时前
抗辐射MCU在低轨卫星电源管理单元中的电压监测与保护策略研究
大数据·单片机·嵌入式硬件·电源管理·低轨卫星·抗辐射·星间链路
4SAPI2 小时前
2026年大模型API接入选型指南:企业与个人用户的架构、稳定性与成本考量
大数据·开发语言·数据库·人工智能·架构·php