- Elasticesearch基础及介绍
- Elasticesearch 介绍
Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST风格API 、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack,简称ELK(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
- Elasticesearch 官网
- Elasticesearch 官网下载压缩包解压(本机演示Windows环境)
解压后的目录结构。
Windows下双击bin目录下的elasticsearch.bat文件
9300端口是elasticsearch内部的通信端口。9200是对外访问的端口。如果访问9200端口出现以下内容,说明启动成功(注:jdk版本推荐使用JDK1.8)
- Result风格
resultful风格是一种软件架构风格,而不是标准,只是提供了一种设计原则和约束条件。主要适用于客户端和服务器端交互的软件。是基于http协议实现。目的是为了提高系统的可伸缩性,降低应用之间的耦合度,方便框架分布式处理程序。基于这个风格的软件可更加的简单、更有层次,更易于实现缓存的机制。对于GET、PUT、DELETe请求多是具有幂等性,POST请求则不具备幂等性,POST请求可能会导致资源的更改。 - JSON格式
JSON全程是Javascript Object Notation是一种轻量级的数据交换格式。JSON字符串一般是指JSON格式的字符串Elasticsearch的响应格式就是JSON格式的。 - 数据格式
Elasticsearch是一个面向文档的一个数据库。为了方便理解,将Elasticsearch的存储文档数据与关系型数据库MySQL存储数据的概念进行一个类比
在官方的文档解释中
第一个业务需求是存储员工数据。 这将会以 员工文档 的形式存储:一个文档代表一个员工。存储数据到 Elasticsearch 的行为叫做 索引 ,但在索引一个文档之前,需要确定将文档存储在哪里。一个 Elasticsearch 集群可以 包含多个 索引 ,相应的每个索引可以包含多个 类型 。 这些不同的类型存储着多个 文档 ,每个文档又有 多个 属性 。
Index Versus Index Versus Index
你也许已经注意到 索引 这个词在 Elasticsearch 语境中有多种含义, 这里有必要做一些说明:
索引(名词):
如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。
索引(动词):
索引一个文档 就是存储一个文档到一个 索引 (名词)中以便被检索和查询。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时,新文档会替换旧文档情况之外。
倒排索引:
关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。
- 默认的,一个文档中的每一个属性都是 被索引 的(有一个倒排索引)和可搜索的。一个没有倒排索引的属性是不能被搜索到的。我们将在 倒排索引 讨论倒排索引的更多细节。
-
倒排索引
详情见官方文档 -
创建索引(不能使用POST请求)
使用POST请求会出现以下信息
-
查看所以信息
localhost:9200/_cat/indices
-
删除索引 DELETE localhost:9200/索引名称
-
创建文档POST(PUT)请求(关键字:doc)localhost:9200/shopping/doc/文档名称
-
局部更新文档POST或者PUT请求
-
全量更新文档POST请求 _update
-
删除文档DELETE请求
-
查询文档GET请求
-
查询某个文档的信息doc/文档名称
-
查询某个索引下的所有文档信息索引名称/_search
-
条件查询-分页查询,排序查询
-
查询所有
POST请求
query、match_all
{
“query”:{
“match_all”:{
}
}
}
- 分页查询
POST请求
query、match_all、from、size
分页的公式:(页码-1)*每页的数量
{
“query”: {
“match_all”: {
}
},
“from”: 0,
“size”: 1
}
- 条件查询
POST请求
q、category、关键字
- 条件查询
POST请求
query、category、关键字
{
“query”: {
“match”: {
“category”: “华为”
}
}
}
- 返回指定的字段
POST请求
query、match_all、from、size、_source、关键字
{
“query”: {
“match_all”: {
}
},
“from”: 0,
“size”: 1,
“_source”: [
“title”
]
}
- 排序查询
POST请求
query、match_all、from、size、_source、sort、关键字
{
“query”: {
“match_all”: {
}
},
“from”: 0,
“size”: 2,
“_source”: [
],
“sort”: {
“price”: {
“order”: “desc”
}
}
}
- 多条件查询
推荐使用POST请求关键字:query,bool,must(注:must可以理解成MySQL中的and)
{
“query”: {
“bool”: {
“must”: [
{
“match”: {
“category”: “华为”
}
},
{
“match”: {
“price”: 9999
}
}
]
}
}
}
- 多条件查询
推荐使用POST请求关键字:query,bool,should(注:should可以理解成MySQL中的or)
{
“query”: {
“bool”: {
“should”: [
{
“match”: {
“category”: “华为”
}
},
{
“match”: {
“category”: “小米”
}
}
]
}
}
}
- 条件查询-范围查询
推荐使用POST请求关键字:query,bool,should;
gt: > 大于(greater than)
lt: < 小于(less than)
gte: >= 大于或等于(greater than or equal to)
lte: <= 小于或等于(less than or equal to)
{
“query”: {
“bool”: {
“should”: [
{
“match”: {
“category”: “华为”
}
},
{
“match”: {
“category”: “小米”
}
}
],
“filter”: {
“range”: {
“price”: {
“gt”: 6000
}
}
}
}
}
}
可查询官方文档
- 条件查询-完全匹配-分析器
推荐使用POST请求
{
“query”:{
“match_phrase”:{
“category”:“小华”
}
}
}
- 高亮查询可参考官网的语法
推荐使用POST请求
{
“query”:{
“match_phrase”:{
“category”:“小”
}
},
“highlight”:{
“fields”:{
“category”:{}
}
}
}
- 聚合查询 官方文档
推荐使用POST请求
{
“aggs”:{//聚合 *** 作
“price_group”:{//随便起的名称
“terms”:{//分组
“field”:“price”
}
}
}
}
- 聚合函数
{
“aggs”: {//聚合 *** 作
“price_avg”: {//随便起的名称
“avg”: {//平均值
“field”: “price” //分组的字段
}
}
},
“size”:0
}
- 映射关系官方文档
{
“properties”: {
“name”: {
“type”: “text”,
“index”: true
},
“sex”: {
“type”: “keyword”,
“index”: true
},
“tel”: {
“type”: “keyword”,
“index”: false
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)