本文简单介绍了使用 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. java基础-day14

    第01天 java面向对象 今日内容介绍 u 接口 u 匿名对象&final u 多态 第1章   接口 1.1  接口的概述 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的 ...

  2. noip第16课作业

    1. 猴子吃桃 [问题描述] 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个:第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个:以后每天都吃前一天剩下的一半多一个,到第10天想再吃时 ...

  3. Ajax_Json

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxJson ...

  4. C# 函数式编程及Monads.net库

    函数式编程中,一切皆为函数,这个函数一般不是类级别的,其可以保存在变量中,可以当做参数或返回值,是函数级别的抽象和重用,将函数作为可重用的基本模块,就像面向对象中一切皆为对象,把所有事物抽象为类,面向 ...

  5. 使用NetHogs监控进程网络使用情况

    Nethogs 是一个终端下的网络流量监控工具,它的特别之处在于可以显示每个进程的带宽占用情况,这样可以更直观获取网络使用情况.它支持 IPv4 和 IPv6 协议.支持本地网卡及 PPP 链接. 使 ...

  6. J - Oil Skimming 二分图的最大匹配

    Description Thanks to a certain "green" resources company, there is a new profitable indus ...

  7. Android-okhttp下载网络图片并设置壁纸

    在AndroidManifest.xml配置网络访问权限: <!-- 访问网络是危险的行为 所以需要权限 --> <uses-permission android:name=&quo ...

  8. Azure DevOps Server:Git权限设置

    Azure DevOps Server 权限概述 在Azure DevOps Server (之前名称为TFS)中,权限是一个比较复杂的概念.从权限层级上来说,包括服务器级别.团队项目集合级别.团队项 ...

  9. Hive Bug修复:ORC表中array数据类型长度超过1024报异常

    目前HVIE里查询如下语句报错: select * from dw.ticket_user_mtime limit 10; 错误如下: 17/07/06 16:45:38 [main]: DEBUG ...

  10. asp.net core mvc 中间件之路由

    asp.net core mvc 中间件之路由 路由中间件 首先看路由中间件的源码 先用httpContext实例化一个路由上下文,然后把中间件接收到的路由添加到路由上下文的路由集合 然后把路由上下文 ...