和我一起打造个简单搜索之ElasticSearch入门
本文简单介绍了使用 Rest 接口,对 es 进行操作,更深入的学习,可以参考文末部分。
环境
本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境。
系列文章
- 一、和我一起打造个简单搜索之ElasticSearch集群搭建
- 二、和我一起打造个简单搜索之ElasticSearch入门
- 三、和我一起打造个简单搜索之IK分词以及拼音分词
- 四、和我一起打造个简单搜索之Logstash实时同步建立索引
- 五、和我一起打造个简单搜索之SpringDataElasticSearch入门
- 六、和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮
- ...
基础概念
索引--相当于数据库
类型--相当于表
文档--相当于一条记录
分片--对索引进行分片,分布于集群各个节点上,降低单个节点的压力
备份--拷贝分片就完成了备份
基本语法
索引
索引类型
- 结构化索引
- 特点:通过接口创建,可以指定 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 接口对数据操作
插入数据
- 指定文档 id 插入
- PUT 请求: ip:port/索引/类型/id
- PUT 请求: ip:port/索引/类型/id
- 自动产生文档 id 插入
- POST 请求: ip:port/索引/类型
- POST 请求: ip:port/索引/类型
修改数据
- 直接修改
2. POST 请求: ip:port/索引/类型/id/_update
删除数据/删除索引
- 删除文档
- DELETE 请求 ip:端口/索引/类型/id
- 删除索引
- DELETE 请求 ip:端口/索引
查询数据
- 简单查询
2. GET 请求: ip:端口/索引/类型/id - 条件查询
- POST请求: ip:端口/索引/_search
- 指定条件查询,分页与排序
{
"query":{
"match":{
"name":"WeJan"
}
},
"sort":[
{
"age":{
"order":"asc"
}
}
],
"from" : 0,
"size" : 10
}
- 聚合查询
- POST请求: ip:端口/索引/_search
- 分组,可以多个分组
{
"aggs":{
"group_by_age":{
"terms":{
"field":"age"
}
}
}
}
- 聚合计算
{
"aggs":{
"age_count":{
"stats":{
"field":"age"
}
}
}
}
- sum
- avg
- max
- min
- count
高级查询
习语匹配(全词匹配)
{
"query":{
"match_phrase":{
"name":"WeJan"
}
}
}
多字段匹配,多个字段包含query
{
"query":{
"multi_match":{
"query":"WeJan",
"fields":["author", "title"]
}
}
}
query_string 文本查询
{
"query":{
"query_string":{
"name":"(WeJan AND Jan) OR 哈哈"
}
}
}
针对多个字段的文本查询
{
"query":{
"query_string":{
"name":"WeJan OR 哈哈",
"fields":["author", "title"]
}
}
}
字段查询,比如年龄,分类
{
"query":{
"term":{
"age":25
}
}
}
范围查询,可以对时间字段进行查询,现在使用 "now"替代
{
"query":{
"range":{
"age":{
"gte":26,
"lte":36
}
}
}
}
参考
和我一起打造个简单搜索之ElasticSearch入门的更多相关文章
- 和我一起打造个简单搜索之ElasticSearch集群搭建
我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌.尺寸.适用季节.价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品. 站内搜索对 ...
- 和我一起打造个简单搜索之SpringDataElasticSearch入门
网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...
- 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮
前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...
- 和我一起打造个简单搜索之Logstash实时同步建立索引
用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...
- 和我一起打造个简单搜索之IK分词以及拼音分词
elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...
- 五十 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...
- ElasticSearch 5学习(4)——简单搜索笔记
空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...
- ElasticSearch入门-搜索如此简单
搜索引擎我也不是很熟悉,但是数据库还是比较了解.可以把搜索理解为数据库的like功能的替代品.因为like有以下几点不足: 第一.like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹 ...
随机推荐
- Beta阶段第五篇Scrum冲刺博客-Day4
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 张晨晨:目标增加单词收藏功能 郭琪容:学习收藏功能的实 ...
- sudo执行脚本找不到环境变量和命令
简介 变量 普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能获取到值,如题情况如下: ...
- POJ1468 Sorting Slides
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4442 Accepted: 1757 De ...
- handsontable 排序问题
排序是表格的基础功能,handsontable也会支持. 有时需求会很复杂,需要自定义排序,或者调用其他排序方法:自定义排序,比较复杂,没做过:今天要用的是调用R中的排序方法. 有两个事件before ...
- nodeclub route
这里是把web_router.js放在根目录下,也可以放在routes文件件下,其实都可以. 这里就是一些url与controller和middleware对应
- letcode code]Maximum Subarray
1 题目: Find the contiguous subarray within an array (containing at least one number) which has the la ...
- 一步步改造wcf,数据加密传输-匿名客户端加密传输
一步步改造wcf,数据加密传输-匿名客户端加密传输 百度搜索wcf加密传输,资料挺多,真真正正能用的确不多. 一是本来就很复杂,而是各位大神给的资料不足.本人今天来提供一个简易方法. 匿名客户端加密传 ...
- 迁移桌面程序到MS Store(3)——开机自启动
迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动.Windows传统桌面程序的传统陋习.不论什么奇葩软件都想要开机自启动,默认就给你打开,一开机哐哐哐什么雷,什么企鹅都蹦出来,也不管你用不用 ...
- 剑指offer编程题Java实现——面试题4后的相关题目
题目描述: 有两个排序的数字A1和A2,内存在A1的末尾有足够多的空余空间容纳A2.请实现一个函数,把A2中的所有数字插入到A1中并且所有的数字是排序的. 还是利用从后向前比较两个数组中的数字的方式来 ...
- lost+found目录有啥用?
Linux系统中根目录下或者新挂载的磁盘目录下有一个叫lost+found,它的作用是什么? 如果你运行fsck命令(文件系统检查和修复命令),它也许会找到一些数据碎片,这些文件碎片在硬盘中并没有引用 ...