倒排索引

  • 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. 公共的service接口

    package com.taotao.manager.service; import java.util.List; /** * @author Administrator * * @param &l ...

  2. hdu 5455 (2015沈阳网赛 简单题) Fang Fang

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5455 题意就是找出所给字符串有多少个满足题目所给条件的子串,重复的也算,坑点是如果有c,f以外的字符也是不 ...

  3. Python中特殊函数和表达式lambda,filter,map,reduce

    1.lambda:使用lambda表达式可以定义一个匿名函数 lambda表达式是一种简洁格式的函数.该表达式不是正常的函数结构,而是属于表达式的类型 (1)基本格式: lambda 参数,参数... ...

  4. 201621123008 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...

  5. [Robot Framework] 如何在Setup中用Run Keywords执行多个带参数的关键字

    参考文档:http://www.howtobuildsoftware.com/index.php/how-do/bZ7q/robotframework-setup-teardown-robot-fra ...

  6. ApplicationContext(九)初始化非延迟的 bean

    ApplicationContext(九)初始化非延迟的 bean 此至,ApplicationContext 已经完成了全部的准备工作,开始初始化剩余的 bean 了(第 11 步). public ...

  7. Netty 源码(二)NioEventLoop 之 Channel 注册

    Netty 源码(二)NioEventLoop 之 Channel 注册 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一 ...

  8. [ ZooKeeper]ZooKeeper 的功能和原理

    Zookeeper功能简介: ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...

  9. centos php 运行环境搭建

    一.安装apache httpd rpm -qa|grep httpd //检查是否安装apache rpm -e 包名 --nodeps //若有则删除 PS:我没有删除,直接用的服务器原来的. y ...

  10. java mail 读取邮件列表,

    // 准备连接服务器的会话信息 Properties props = new Properties(); props.setProperty("mail.store.protocol&quo ...