Elasticsearch

1.什么是Elasticsearch

Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。Elasticsearch 是索引、搜索和分析魔法发生的地方。

2.数据库作为搜索的弊端

1.站内搜索(垂直搜索):
数据量小,简单搜索,可以使用数据库。
这样会出现什么样的问题呢?
1.存储问题。电商网站商品上亿条时,涉及到单表数据过大必须拆分表,
数据库磁盘占用过大必须分库( mycat )。
2.性能问题:解决上面问题后,查询 “ 笔记本电脑 ” 等关键词时,上亿条数据
的商品名字段逐行扫描,性能跟不上。
3.不能分词。如搜索 “ 笔记本电脑 ” ,只能搜索完全和关键词一样的数据,那
么数据量小时,搜索 “ 笔记电脑 ” , “ 电脑 ” 数据要不要给用户。
2. 互联网搜索,肯定不会使用数据库搜索。数据量太大。 PB 级。
我们可以使用搜索引擎来解决数据库搜索的问题 :
搜索也是一款数据库,搜索可以进行分词搜索 --- 搜索速度非常快

3.常见的搜索引擎

ElasticSearch和Solr

3.1二者的区别

  1. Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果,【特点】是一个高性能,采用Java开发,Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

2.ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

3.2性能的对比

3.3具体的比较

4. Kibana

Kibana 是一种数据可视化和挖掘工具,可以用于日志和时间序列分析、应用程序监控和运营智能使用案例。它提供了强大且易用的功能,例如直方图、线形图、饼图、热图和内置的地理空间支持。此外,它还提供了与 Elasticsearch 的紧密集成,后者是一款流行的分析和搜索引擎,这使得 Kibana 成为了可视化 Elasticsearch 中存储数据的默认之选。

4.1使用Kibana

开启  Elasticsearch 

开启kibana

 在网页上输入localhsot:5601就可以进入Kibana

5.命令

5.1创建索引,并在里面填上数据,自动创建id

PUT /king/student/3{
  "name" : "摩托哥",
  "age" : 35
}

5.2创建索引,添加上数据,随机创建id

POST /king/student/{

        "name" : "马闹鸡",

        "age" : 28

}

5.3创建索引,不添加数据

PUT /lin 
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
      "age":{
        "type":"integer"
      }
    }
  }
}

5.4删除索引

DELETE /lin

5.5查询都有什么索引

GET /_cat/indices?v

5.6查看索引下类型的数据

GET /king/student/2

5.7修改部分文档

POST /user/doc/1/update
{
  "doc":{
    "name":"旅游博主林先生"
  }
}

5.8修改---这种修改必须指定所有列,如果只指定一部分列,那么它原来的其他列就会消失。

PUT /king/student/2
{
  "name":"灰姑娘",
  "age":"16"
}

5.9查询所有数据

GET /king/student/_search

5.10根据条件查询数据

GET /king/student/_search?q=name:"林"

5.11查询的条件封装到json中,默认都是doc,查询部分列用"_source":[],from是根据下标指定第几页,size是指定一页中有几条数据

PUT /user/_doc/1
{
  "name":"林先生",
  "age":20,
  "desc":["沉着","冷静","缜密"]
}

PUT /user/_doc/2
{
  "name":"摩托哥",
  "age":20,
  "desc":["坚持","努力"]
}

PUT /user/_doc/3
{
  "name":"阿瑟",
  "age":18,
  "desc":["细心","肯吃苦"]
}

GET /user/_search
{
  "query":{
    "match":{
      "age":"20"
    }
  },
  "_source": ["name","age","desc"],
  "from":1,
  "size":1
}

5.12range范围,lt是小于 gt是大于 sort是排序desc是降序,asc是升序

GET /user/_search
{
  "query":{
    "range":{
      "age":{
        "gt":3
      }
    }
  },
  "_source": ["name","age","desc"],
  "from":0,
  "size":10,
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

5.13must相当于and,should相当于or

GET /user/_search
{
  "query":{
    "bool": {
      "must_not": [
        {
          "match": {
            "age": "20"
          }
        }
      ]
    }
  }
}

5.14高亮查询highlight,fields领域,pre_tags前置标签,post_tags后置标签

GET /user/_search
{
  "query":{
    "match": {
      "name": "林"
    }
  },
  "highlight": {
    "pre_tags": "<span style='color:red'>",
    "post_tags": "</span>", 
    "fields": {
      "name": {}
    }
  }
}

5.15match匹配查询,会对匹配的关键字进行拆字操作,term精准查询,不会对关键字进行拆词操作

GET /user/_search
{
  "query": {
    "term": {
      "name": "先"
    }
  }
}

5.16分词keyword是不分词的,分词standard是分词的

GET _analyze
{
  "analyzer": "keyword",
  "text":["测试是否分词"]
}

GET _analyze
{
  "analyzer": "standard",
  "text":["测试是否分词"]
}

5.17类型是文本的时候会分词,是keyword的时候是不分词的

PUT /test
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
      "address":{
        "type": "keyword"
      }
    }
  }
}

PUT /test/_doc/1
{
  "name":"测试keyword和text哪种是分词的",
  "address":"测试keyword和text哪种是分词的"
}

5.18查询的时候因为address的类型是keyword所以没有办法分词,是一个整体,所以就无法使用address查询

GET /test/_search
{
  "query": {
    "match": {
      "name": "测试"
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值