Elasticsearch教程-入门
一、elasticsearch是什么?
全文搜索属于最常见的需求,开源的 Elasticsearch是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
Elasticsearch的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elasticsearch是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
官网:https://www.elastic.co/cn/elasticsearch
二、为什么用elasticsearch?
优点
- 开箱即用,天生集群
- 横向扩展性。只需要增加一台服务器,做一点配置,启动一下ES进程就可以并入集群。
- 分片机制提供更好的分布性。:同一个索引分成多个分片(sharding),分而治之的方式来提供处理效率。
- 高可用。提供复制(replica),一个分片可以设置多个复制分片,使得某台服务器宕机的情况下,集群仍旧可以照常运行;
- 速度快,负载能力强,在面对海量数据时候,搜索速度极快。
缺点
-
各节点数据的一致性问题。其默认的机制是通过多播机制,同步元数据信息,但是在比较繁忙的集群中,可能会由于网络的阻塞,或者节点处理能力达到饱和,导致各数据节点数据不一致——也就是所谓的脑裂问题,这样会使得集群处于不一致状态。目前并没有一个彻底的方案来解决这个问题,但是可以通过参数配置和节点角色配置来缓解这种情况。
-
没有细致的权限管理。也就是说,没有像mysql那样的分各种用户,每个用户又有不同的权限。所以在操作上的限制需要自己开发一个系统化来完成。
三、怎么用elasticsearch?
1. 索引
操作名称 | 请求方式 | 请求地址 |
---|---|---|
创建索引 | put | http://localhost:9200/shopping |
查询单个索引 | get | http://localhost:9200/shopping |
查询所有索引 | get | http://localhost:9200/_cat/indices?v |
删除索引 | delete | http://localhost:9200/shopping |
2. 文档
操作名称 | 请求方式 | 请求地址 | 请求体 | 备注 |
---|---|---|---|---|
创建文档 | post | http://localhost:9200/shopping/_doc | { "title": "苹果手机", "category": "手机","images": "http://www.谷歌.com", "price": 10999.00} |
|
创建自定义id文档(第一次请求时创建,重复请求时更新) | post/put | http://localhost:9200/shopping/_doc/1001 | { "title": "苹果手机", "category": "手机","images": "http://www.谷歌.com", "price": 10999.00} |
|
创建自定义id文档(第一次请求时创建,重复请求时报已存在信息) | post/put | http://localhost:9200/shopping/_create/1002 | { "title": "苹果手机", "category": "手机","images": "http://www.谷歌.com", "price": 10999.00} |
|
查询一个文档 | get | http://localhost:9200/shopping/_doc/1001 | ||
查询所有文档 | get | http://localhost:9200/shopping/_search | ||
全量更新文档 | put | http://localhost:9200/shopping/_doc/1001 | { "title": "三星手机", "category": "手机","images": "http://www.samsung.com", "price": 11999.00} |
|
局部更新文档 | post | http://localhost:9200/shopping/_update/1001 | {"doc": { "title": "三星手机"}} |
|
删除文档 | delete | http://localhost:9200/shopping/_doc/1001 | ||
带条件查询文档(请求参数) | get | http://localhost:9200/shopping/_search?q=category:手机 | ||
带条件查询文档(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"match": {"category": "手机"}}} |
|
带条件分页查询文档(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"match": {"category": "手机"}},"from": 0,"size": 2} |
|
只查固定标题列查询文档(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"match": {"category": "手机"}},"_source": ["title"]} |
|
根据特定字段排序查询文档(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"match": {"category": "手机"}},"sort": [{"price": {"order": "desc"}}]} |
5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。 |
多条件查询文档(must=且)(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"bool": {"must": [{"match": {"category": "手机"}}, {"match": {"price": 10999.00}}]}}} |
|
多条件查询文档(should=或)(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"bool": {"should": [{"match": {"title": "苹果手机"}}, {"match": {"title": "三星手机"}}]}}} |
|
范围查询文档(filter)(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"bool": {"should": [{"match": {"title": "苹果手机"}}, {"match": {"title": "三星手机"}}], "filter": {"range": {"price":{"gt": 11000}}}}}} |
|
完全匹配查询文档(match_phrase)(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"match_phrase": {"title": "三星手机"}}} |
|
对结果高亮显示查询文档(hightlight)(请求体) | get | http://localhost:9200/shopping/_search | {"query": {"match_phrase": {"title": "三星手机"}}, "highlight":{"fields": {"title": {}}}} |
只能对查询的字段做高亮显示 |
聚合查询文档(aggs)(请求体) | get | http://localhost:9200/shopping/_search | {"aggs": {"price_group": {"terms": {"field": "price"}}}} |
5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。 |
聚合不显示原始数据查询文档(size)(请求体) | get | http://localhost:9200/shopping/_search | {"aggs": {"price_group": {"terms": {"field": "price"}}}, "size": 0} |
1、price_group是自定义的名字;2、5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。 |
聚合平均值查询文档(aggs)(请求体) | get | http://localhost:9200/shopping/_search | {"aggs": {"price_avg": {"avg": {"field": "price"}}}} |
1、price_avg是自定义的名字;2、5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。 |
- 映射
1)创建索引
请求方式:put, 请求地址:http://localhost:9200/user
2)创建关系
请求方式:put, 请求地址:http://localhost:9200/user/_mapping,请求体如下:
{
"properties": {
"name": {
"type": "text", // 可以被分词
"index": true // 可以被索引查询
},
"sex": {
"type": "keyword", // 不能够被分词,必须完整匹配
"index": true
},
"tel": {
"type": "keyword",
"index": false // 不能够被索引
}
}
}
3)查询关系
请求方式:get, 请求地址:http://localhost:9200/user/_mapping
4)增加文档数据
请求方式:put, 请求地址:http://localhost:9200/user/_create/1001,请求体如下:
{
"name": "张三",
"sex": "男的",
"tel": "1111"
}
5)查询文档数据
- 请求方式:get, 请求地址:http://localhost:9200/user/_search,请求体如下:
{
"query": {
"match": {
"name": "张"
}
}
}
结果:可以查到数据
- 请求方式:get, 请求地址:http://localhost:9200/user/_search,请求体如下:
{
"query": {
"match": {
"sex": "男"
}
}
}
结果:查不到数据。因为sex是keyword类型,不能够被分词,必须完整匹配
- 请求方式:get, 请求地址:http://localhost:9200/user/_search,请求体如下:
{
"query": {
"match": {
"tel": "1111"
}
}
}
结果:查不到数据。因为tel的index是false,该字段不能够被索引
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggghai
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13