倒排索引

  • ElasticSearch使用一种称为倒排索引的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

查询

# 查看索引配置
GET /book/_settings
GET /_all/_settings
# 查询所有index的数据
GET _search
{
 "query": {
   "match_all": {}
}
}
# 查询文档
GET /lib/user/1
# 查询文档(指定字段)
GET /lib/user/1?_source=age,about
# 查看mapping
GET /lib/user/_mapping

添加

# 创建索引
PUT /lib/
{
 "settings":{
   "index":{
       "number_of_shards":3,
       "number_of_replicas":0
  }
}
}
# 添加文档(指定id)
PUT /lib/user/1
{
 "first_name":"Jane",
 "last_name":"Smith",
 "age":32,
 "about":"I like to colloct rock albums",
 "interests":["music","baseketball"]
}
# 添加文档(不指定文档id,系统自动生成id)
POST /lib/user/
{
 "first_name":"Douglas",
 "last_name":"Fir",
 "age":23,
 "about":"I like to bulid cabinets",
 "interests":["forestry"]
}

更新

# 修改(全字段覆盖的方式)
PUT /lib/user/1
{
 "first_name":"Jane",
 "last_name":"Smith",
 "age":36,
 "about":"I like to colloct rock albums",
 "interests":["music","baseketball"]
}
# 修改(指定字段)
POST /lib/user/1/_update
{
 "doc":{
   "age":30
}
}

删除

# 删除文档id
DELETE /lib/user/1
# 删除type
DELETE /lib/user
# 删除index
DELETE lib

批量获取文档

  • 使用es提供的Multi Get API:

  • 使用Multi Get API可以通过索引名、类型名、文档id一次得到一个文档集合,文档可以来自一个索引库,也可以来自不同索引库

  • 使用curl命令:

    curl 'http://192.168.242.22:9200/_mget' -d' {
    "docs":[
      {
           "_index":"lib",
           "_type":"user",
           "_id":1
      },
      {
           "_index":"lib",
           "_type":"user",
           "_id":AWdQF9axrlJvDlOTtvkF
      }
    ]
    }
    # kibana dev tools
    GET /_mget
    {
       "docs":[
          {
               "_index":"lib",
               "_type":"user",
               "_id":1
          },
          {
               "_index":"lib",
               "_type":"user",
               "_id":"AWdQF9axrlJvDlOTtvkF"
          }
      ]
    }
    # 指定获取的字段
    GET /_mget
    {
       "docs":[
          {
               "_index":"lib",
               "_type":"user",
               "_id":1,
               "_source":"interests"
          },
          {
               "_index":"lib",
               "_type":"user",
               "_id":"AWdQF9axrlJvDlOTtvkF",
               "_source":["interests","age"]
          },
            {
               "_index":"book",
               "_type":"novel",
               "_id":"5",
               "_source":["title","word_count"]
          }
      ]
    }
    ​
    # 相同index、type
    GET /lib/user/_mget
    {
       "docs":[
          {
               "_id":1
          },
          {
               "_id":"AWdQF9axrlJvDlOTtvkF"
          }
      ]
    }
    # 再简化
    GET /lib/user/_mget
    {
       "ids":["1","AWdQF9axrlJvDlOTtvkF"]
    }

使用Bulk API实现批量操作

  • bulk的格式:

    {
       action:{metadata}\n
      {resquestbody}\n
    }
    ​
    # action:行为
       # create:文档不存在时创建(如果存在使用会报错)
       # update:更新文档
       # index:创建新文档或替换已有文档
       # delete:删除一个文档
    # metedata:_index,_type,_id
  • 例子

    # 删除
    {"delete":{"_index":"lib","_type":"user","_id":"1"}}
    # 批量添加
    POST /lib/books/_bulk
    {"index":{"_id":"1"}}
    {"title":"Html5","price":45}
    {"index":{"_id":"2"}}
    {"title":"PHP","price":35}
    {"index":{"_id":"3"}}
    {"title":"Java","price":55}
    {"index":{"_id":"1"}}
    {"title":"Python","price":50}
    {"index":{"_id":"1"}}
    {"title":"Scala","price":48}
    # 批量添加
    POST /lib/books/_bulk
    {"delete":{"_index":"lib","_type":"books","_id":"4"}}
    {"create":{"_index":"tt","_type":"ttt","_id":"100"}}
    {"name":"lisi"}
    {"index":{"_index":"tt","_type":"ttt"}}
    {"name":"zhaosi"}
    {"update":{"_index":"lib","_type":"books","_id":"5"}}
    {"doc":{"price":58}}
  • bulk一次最大处理多少数据量

    • bulk会把将要处理的数据加载入内存中,所以数据量是有限制的,最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小及复杂性,你的索引以及搜索的负载

    • 一般建议是1000-5000个文档,大小建议是5-15M,默认不能超过100M,可以再es的配置文件设置

ES基本操作的更多相关文章

  1. 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作

    spring boot 2.X集成ES 进行CRUD操作  完整版 内容包括: ============================================================ ...

  2. es使用postmain进行数据的增删改查

    es的基本安装 安装遇到的问题  java本地环境和es环境冲突 ​ https://www.cnblogs.com/q1359720840/p/14077049.html ​ ​ ,看要使用jdk1 ...

  3. jest for elasticsearch

    *elasticsearch(后面简称es) 背景: 目前项目应用中对es的操作用的是http(自己封装)的一套方法:有些数据处理起来还是需要定制开发处理,不是很方便.正好需要对本项目重新进行改造,于 ...

  4. elasticsearch索引自动清理

    一 es 基本操作 查看所有的索引文件:  curl -XGET http://localhost:9200/_cat/indices?v GET /_cat/indices?v DELETE /fi ...

  5. Spring Boot 集成 Elasticsearch 实战

    最近有读者问我能不能写下如何使用 Spring Boot 开发 Elasticsearch(以下简称 ES) 相关应用,今天就讲解下如何使用 Spring Boot 结合 ES. 可以在 ES 官方文 ...

  6. ElasticSearch详细笔记

    ElasticSearch详细笔记 什么是ElasticSearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Luce ...

  7. (九)整合 ElasticSearch框架,实现高性能搜索引擎

    整合 ElasticSearch框架,实现高性能搜索引擎 1.SpringBoot整合ElasticSearch 1.1 核心依赖 1.2 配置文件 1.3 实体类配置 1.4 数据交互层 1.5 演 ...

  8. Elasticsearch使用系列-ES增删查改基本操作+ik分词

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 一.安装可视化工具Kibana ES是一个NoSql数据库应用.和其他数据库 ...

  9. ElasticSearch(三):ES单机版本基本操作之删除,修改,插入

    1. 创建索引 1.1 直接创建索引 可以直接使用head插件创建索引,指定分片数和备份数即可.如下图: 1.2 创建结构化索引 上图创建的索引,点开索引信息,mapping是空的,表示该索引的字段并 ...

随机推荐

  1. (转)在WinForm中选择本地文件

    相信很多朋友在日常的编程中总会遇到各钟各样的问题,关于在WinForm中选择本地文件就是很多朋友们都认为很难的一个学习.net的难点, 在WebForm中提供了FileUpload控件来供我们选择本地 ...

  2. Hadoop(二) HADOOP集群搭建(简化版)

    1.准备Linux环境    1.0先将虚拟机的网络模式选为NAT            1.1修改主机名        vi /etc/sysconfig/network               ...

  3. Android.StructureOfAndroidSourceCodeRootTree

    Refference 1. How to understand the directory structure of android root tree? http://stackoverflow.c ...

  4. Linux网卡绑定探析

    2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的网卡绑定模式,Linux b ...

  5. AppStore企业账号打包发布APP流程详解

    一.通过企业账号申请证书 1 Certificate Signing Request (CSR)文件 在Mac系统中进入“钥匙串访问”,选择“钥匙串访问”-“证书助理”-“从证书颁发机构请求证书…”, ...

  6. Python之路(第六篇)Python全局变量与局部变量、函数多层嵌套、函数递归

    一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序. 全局变量没有任何缩进,在任何位置都可 ...

  7. [ES]ES查询指南

    我们通常用用_cat API检测集群是否健康. 确保9200端口号可用: curl 'localhost:9200/_cat/health?v' 绿色表示一切正常, 黄色表示所有的数据可用但是部分副本 ...

  8. 实现SQL express版做自动备份数据库的方法

    SQL Server 2005/2008 Express版没有代理组件,不支持维护计划.可以采用下面的办法实现每日备份: 一.在要备份的数据库中创建存储过程. 存储过程名称:sp_BackupData ...

  9. 【UI测试】--快捷键组合

  10. inet_pton和inet_ntop inet_ntoa

    Linux下地址转换函数 inet_pton ==> Ox inet_ntop ==> xxx.xxx.xxx #include <sys/types.h> #include ...