本文简单介绍了使用 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理论学时第四节。课后作业。

    请查看String.equals()方法的实现代码,注意学习其实现方法. public class StringEquals { public static void main(String[] ar ...

  2. CentOS 7配置nginx-1.13.10支持http/2和Server Push

    0.确保openssl版本大于1.0.2 openssl version 1.下载nginx-1.13.10 wget http://nginx.org/download/nginx-1.13.10. ...

  3. python安装mysql-python依赖包

    # 背景 新公司,对换工作了!接口自动化使用的是python的behave框架,因此需要折腾python了,而公司配的笔记本是windows的,因此要在windows下折腾python了 # 步骤 项 ...

  4. JMeter----正则表达式&JSON Path Extractor

    最近在用JMerter给公司一个项目做性能测试,期间遇到要提取上一个接口返回的数据作为下个接口的请求.这里做下记录 如图所示,需要将“扫描二维码”接口请求的返回值中的data部分,作为“处理提交码值” ...

  5. ASP.NET Core开源地址

    https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet 这个下面是asp.net core 框架 ...

  6. dotnet core瘦身发布

    需要安装nuget包Microsoft.Packaging.Tools.Trimming然后利用如下命令发布dotnet publish -r win10-x64 -c release --self- ...

  7. C# 子线程调用主线程窗体的解决方法

    摘自其他人博客,自己试过确实解决问题.(如在自己定义的线程里面给textbox赋值) 由于Windows窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value ...

  8. WPF 嵌入Winform GDI 、 开启AllowsTransparenc问题

    此文章可以解决2至少2个问题: 1.开启AllowsTransparenc造成的GDI+组件不显示问题 2.WPF 组件无法覆盖嵌入WPF窗口的任何第三方GDI+组件上层 方案1:自制双层 原理:用一 ...

  9. 【转】C#中dynamic的正确用法

    原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic ...

  10. 讲讲我当年是怎么拿到AI研发公司offer的

    前言 很多的老铁私信问我,当年我是怎么拿到公司offer的,我记得我毕业是2015年,那时人工智能这个行业还没热起来,能提供的岗位很少但是面试的人更少,我又是本专业毕业的,所以当初找工作还算顺利,去面 ...