• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Elasticsearch教程-入门

武飞扬头像
LufeiWa
帮助1

一、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. 映射
    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
系列文章
更多 icon
同类精品
更多 icon
继续加载