本文简单介绍了使用 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. ArcGIS 点云转DEM

  2. html5+javascript的管廊监控页面

    这周二做的,支持苹果手机,安卓手机,电脑,平板访问

  3. codeblocks+SDCC开发51单片机

    说到51,大部分人都是用的是KEIL开发环境,但是KEIL是商业软件,我们一般人都用的是破解版的,如果用于商业就会收到法律诉讼.然而有一款很好的编译器专为51内核而存在.SDCC最大的有点就是开源免费 ...

  4. 类中main函数的快捷创建

    方法一: 新建类时,选择创建 方法二: 打出main-->Alt + /

  5. Codeforces Round #540 (Div. 3)--1118B - Tanya and Candies(easy TL!)

    Tanya has nn candies numbered from 11 to nn. The ii-th candy has the weight aiai. She plans to eat e ...

  6. Android Studio开发之Gradle科普

    我们以前开发都是用 Eclipse ,而 Eclipse 大家都知道是一种 IDE (集成开发环境),最初是用来做 Java 开发的,而 Android 是基于 Java 语言的,所以最初 Googl ...

  7. Ajax_Json

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

  8. AngularJS 脏检查机制

    脏检查是AngularJS的核心机制之一,它是实现双向绑定.MVVM模式的重要基础. 一.digest循环 AngularJS将双向绑定转换为一个堆watch表达式,然后递归检查这些watch表达式的 ...

  9. xampp 80端口被占用后这么办??解决了

    modify port XAMPP: Another web server daemon is already running. 看不懂翻译一下 1. Open the file /opt/lampp ...

  10. 【react】当react框架遇上百度地图

      百度地图官方文档的使用指导是这样说的:在页面中引入<script type="text/javascript" src="http://api.map.baid ...