倒排索引

  • 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. ok,机房小感

    难得一次能早来机房,趁今天考完试没啥事,随便写两句牢骚. 学习与编程 老师曾经在招生的时候认真讨论过这个问题,这两者彼此协调并不是一件容易事,很明显,编程是一门大课.它虽然与理科有一定联系,但不代表它 ...

  2. map reduce 用法 str处理lower() capitalize()

    -- s=' l={':9}[s[0]] print(l) 取出dic里面key的元素 def normalize(name): tempn=name.lower().capitalize() ret ...

  3. 动态加载及Servlet容器加载

    动态加载 动态加载是 Servlet 3.0 中的新特性,它可以实现在不重启 Web 应用的情况下加载新的 Web 对象(Servlet.Filter.Listener). 为了实现动态加载的第一种方 ...

  4. Java中多线程访问冲突的解决方式

    当时用多线程访问同一个资源时,非常容易出现线程安全的问题,例如当多个线程同时对一个数据进行修改时,会导致某些线程对数据的修改丢失.因此需要采用同步机制来解决这种问题. 第一种 同步方法 第二种 同步代 ...

  5. c#对dataset和list集合压缩和解压,能提高访问速度

    public class YS { public static byte[] Decompress(byte[] data) { byte[] bData; MemoryStream ms = new ...

  6. 1.about

    1)about Evarobot a.Evarobot Tech Specs 2)应用场景 Using a PC running visualisation/monitoring software a ...

  7. IOS初级:NSUserDefaults

    NSUserDefaults(偏好设置),一个APP对应一个偏好设置 保存/新增数据 //存储数据 NSUserDefaults *defaults = [NSUserDefaults standar ...

  8. centos7 hbase 搭建笔记

    1.require:java环境,本地可用的hadoop 2.拷贝hbase文件(hive-1.2.6) 3.设置环境变量 export HBASE_HOME=/data/spark/bin/hbas ...

  9. linux 磁盘挂载及查看磁盘

    blkid命令实例 .列出当前系统中所有已挂载文件系统的类型: sudo blkid .显示指定设备 UUID: sudo blkid -s UUID /dev/sda5 .显示所有设备 UUID: ...

  10. 2018.01.04 bzoj5291: [Bjoi2018]链上二次求和(线段树)

    传送门 线段树基础题. 题意:给出一个序列,要求支持区间加,查询序列中所有满足区间长度在[L,R][L,R][L,R]之间的区间的权值之和(区间的权值即区间内所有数的和). 想题555分钟,写题202 ...