倒排索引

  • 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. andorid 练习微信登陆

    AndroidManifest.xml layout1.xml <?xml version="1.0" encoding="utf-8"?> < ...

  2. hdu 1754(基础线段树) I Hate It

    http://acm.hdu.edu.cn/showproblem.php?pid=1754 数据比较大,暴力会超时,所以明显是线段树,普通的线段树,结构体中多开一个值sum储存每个子区间的最大成绩, ...

  3. 洛谷2860 [USACO06JAN]冗余路径Redundant Paths

    原题链接 题意实际上就是让你添加尽量少的边,使得每个点都在至少一个环上. 显然对于在一个边双连通分量里的点已经满足要求,所以可以用\(tarjan\)找边双并缩点. 对于缩点后的树,先讲下我自己的弱鸡 ...

  4. 原生和web交互jsbridge交互总结

    技术点:jsbridge. 一: 参数及其意义(代码意义结合支付项目) 二:主动请求原生参数与方法(sendapi) 参数1 判断接口类型 参数2 传递给原生的数据 参数3 回调函数,response ...

  5. 关于redis和memcached的一些想法

    看了redis和memcached,想到自己前几年以前会把内存分配及调用和程序写在一起.确实是不合理的.这样的话,主进程就会越来越大,而且模块也不是完全独立.不能做到松耦合. 实质就是把内存的读写I/ ...

  6. [Jmeter] 在jenkins上通过命令行运行时,针对单个listener生成的chart报告,并通过邮件发送出来

    We need to use cmdrunner-2.0.jar Firstly, download cmdrunner-2.0.jar from here:https://jmeter-plugin ...

  7. Python之路(第二十一篇) re模块

    一.re模块 正则表达式本身是一种小型的.高度专业化的编程语言,正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re,正则表达式模式被编译成一系列的字节码,然 ...

  8. 最佳运动类APP-Keep设计与欣赏

    运动类APP是大家手机中必备的一款软件.如果说谁手机里没有任何涉及运动类APP,那只能说真的与时代脱轨了.近些年随着物质生活条件的改善,人们开始越来越重视自己的身体,所以也越来越多的人会进行身体锻炼. ...

  9. web API分类

    什么是Web API? Web API是网络应用程序接口.包含了广泛的功能,网络应用通过API接口,可以实现存储服务.消息服务.计算服务等能力,利用这些能力可以进行开发出强大功能的web应用. 分类 ...

  10. 控制台管理apk

    http://www.cnblogs.com/mythou/archive/2013/06/11/3132249.html pm命令的具体用法如下: pm 命令是Android里面packageMan ...