本文简单介绍了使用 Rest 接口,对 es 进行操作,更深入的学习,可以参考文末部分。

环境

本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境。

系列文章

基础概念

索引--相当于数据库

类型--相当于表

文档--相当于一条记录

分片--对索引进行分片,分布于集群各个节点上,降低单个节点的压力

备份--拷贝分片就完成了备份


基本语法

索引

索引类型

  • 结构化索引

    • 特点:通过接口创建,可以指定 mappings
    • url:port/索引名/类型名/_mappings
  • 非结构化索引
    • 特点:通过 elasticsearch head 创建 mapping 为空

使用 RestClient/PostMan 创建结构化索引

创建一个 people 的索引,包含一个类型 man

{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"man":{
"properties":{
"name":{
"type":"text"
},
"country":{
"type":"keyword"
},
"age":{
"type":"integer"
},
"date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}

keyword 与 text 的区别

type 类型为 keyword 的时候,ES 不会对其进行分词,而 text 会被分词

es 通过 rest 接口对数据操作

插入数据

  1. 指定文档 id 插入

    1. PUT 请求: ip:port/索引/类型/id

  2. 自动产生文档 id 插入
    1. POST 请求: ip:port/索引/类型

修改数据

  1. 直接修改

    2. POST 请求: ip:port/索引/类型/id/_update

删除数据/删除索引

  1. 删除文档

    1. DELETE 请求 ip:端口/索引/类型/id
  2. 删除索引
    1. DELETE 请求 ip:端口/索引

查询数据

  1. 简单查询

    2. GET 请求: ip:端口/索引/类型/id
  2. 条件查询
    1. POST请求: ip:端口/索引/_search
    2. 指定条件查询,分页与排序
      {
      "query":{
      "match":{
      "name":"WeJan"
      }
      },
      "sort":[
      {
      "age":{
      "order":"asc"
      }
      }
      ],
      "from" : 0,
      "size" : 10
      }
  3. 聚合查询
    1. POST请求: ip:端口/索引/_search
    2. 分组,可以多个分组
      {
      "aggs":{
      "group_by_age":{
      "terms":{
      "field":"age"
      }
      }
      }
      }
    3. 聚合计算
      {
      "aggs":{
      "age_count":{
      "stats":{
      "field":"age"
      }
      }
      }
      }
      • sum
      • avg
      • max
      • min
      • count

高级查询

  1. 习语匹配(全词匹配)

    {
    "query":{
    "match_phrase":{
    "name":"WeJan"
    }
    }
    }
  2. 多字段匹配,多个字段包含query

    {
    "query":{
    "multi_match":{
    "query":"WeJan",
    "fields":["author", "title"]
    }
    }
    }
  3. query_string 文本查询

    {
    "query":{
    "query_string":{
    "name":"(WeJan AND Jan) OR 哈哈"
    }
    }
    }
  4. 针对多个字段的文本查询

    {
    "query":{
    "query_string":{
    "name":"WeJan OR 哈哈",
    "fields":["author", "title"]
    }
    }
    }
  5. 字段查询,比如年龄,分类

    {
    "query":{
    "term":{
    "age":25
    }
    }
    }
  6. 范围查询,可以对时间字段进行查询,现在使用 "now"替代

    {
    "query":{
    "range":{
    "age":{
    "gte":26,
    "lte":36
    }
    }
    }
    }

参考

和我一起打造个简单搜索之ElasticSearch入门的更多相关文章

  1. 和我一起打造个简单搜索之ElasticSearch集群搭建

    我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌.尺寸.适用季节.价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品. 站内搜索对 ...

  2. 和我一起打造个简单搜索之SpringDataElasticSearch入门

    网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...

  3. 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮

    前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...

  4. 和我一起打造个简单搜索之Logstash实时同步建立索引

    用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...

  5. 和我一起打造个简单搜索之IK分词以及拼音分词

    elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...

  6. 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索

    第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...

  7. 五十 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索

    第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...

  8. ElasticSearch 5学习(4)——简单搜索笔记

    空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...

  9. ElasticSearch入门-搜索如此简单

    搜索引擎我也不是很熟悉,但是数据库还是比较了解.可以把搜索理解为数据库的like功能的替代品.因为like有以下几点不足: 第一.like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹 ...

随机推荐

  1. hibernate增删改

    public class HibernateUtils { private static SessionFactory sessionFactory=null; static{ //获取config ...

  2. web-day11

    第11章WEB11-Cookie&Session篇 今日任务 显示用户的上次访问时间 登录系统以后显示商品浏览记录 购买商品将商品添加到购物车 系统登录的验证码的校验 教学导航 教学目标 了解 ...

  3. 3D打印切片软件介绍

    熟悉3D打印的流程的人都知道,在建立了3D模型以后要就进行切片,但是什么是切片呢?切片实际上就是讲3D模型转化为3D打印机本身可以执行的代码,G代码,M代码. 3D打印流程 今天我们简要的介绍3款切片 ...

  4. 100度享乐电商网 CSS

    /*reset begin*/body,div,dl,dt,p,h1,h2,h3,h4,h5,input,form,span,ul{ margin: 0; padding: 0;}a{ text-de ...

  5. 前端开发 - JavaScript 词法分析

    JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 1.分析函数的参数 2.分析函数的变量声明 3.分析函数的函数声明表达式 具体步骤如下: 函数在运行的瞬间,生成 ...

  6. ReportMachine 自定义代码 画细线

    ReportMachine 自定义代码 画细线 procedure Memo3_OnBeforePrint(Sender: TObject); begin Memo3.Text := inttostr ...

  7. hdu 1.2.8

    #include<cstdio> #include<iostream> using namespace std; int pow(int a,int b) { ; while( ...

  8. Kali Linux渗透测试实战 1.3 渗透测试的一般化流程

    1.3 渗透测试的一般化流程 凡事预则立,不预则废,做任何事情都要有一个预先的计划.渗透测试作为测试学科的一个分支,早已形成了完整的方法论.在正式开始本书的实践教学章节之前,我也想谈一谈使用Kali ...

  9. Android开发教程 - 使用Data Binding(六)RecyclerView Adapter中的使用

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  10. 记录cacl()函数中使用scss变量不生效的问题

    问题 使用cacl()动态计算元素的高度,运算中包含一个scss变量.如下: height: calc(100% - $ws-header-height); 在浏览器中发现并没有达到预期效果,scss ...