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": "测试"
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340