ElasticSearch的文档、字段、映射和高级查询

news2024/11/23 22:40:29

1. 文档(Document)

在ES中一个文档是一个可被索引的基础信息单元,也就是一条数据

比如:你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。

在一个index/type里面,你可以存储任意多的文档。

1.1 创建文档

POST users/_doc
{
	"user" : "Mike",
  "post_date" : "2019-04-15T14:12:12",
  "message" : "trying out Kibana"
}

PUT users/_doc/1?op_type=create
{
    "user" : "Jack",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

1.2 查看文档

GET users/_doc/1

1.3 更新文档

POST users/_doc/1
{
  "user": "Lucy"
}

GET users/_doc/1

在原文档上增加字段

POST users/_update/1/
{
    "doc":{
        "post_date" : "2019-05-15T14:12:12",
        "message" : "trying out Elasticsearch"
    }
}

再次查看结果

1.4  删除文档

DELETE users/_doc/1

条件删除

POST users/_delete_by_query
{
  "query":{
    "match": {
      "user": "Mike"
    }
  }
}

2. 字段(Field)

相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。

3. 映射(Mapping)

mapping是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理ES里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

3.1 创建映射

PUT /student

PUT /student/_mapping
{
  "properties": {
    "name":{
      "type": "text",
      "index": true
    },
    "sex":{
      "type": "text",
      "index": true
    },
    "age":{
      "type": "long",
      "index": true
    }
  }
}

映射数据说明:

l字段名:任意填写,下面指定许多属性,例如:titlesubtitleimagesprice

ltype:类型,Elasticsearch中支持的数据类型非常丰富,说几个关键的:

nString类型,又分两种:

text:可分词

keyword:不可分词,数据会作为完整字段进行匹配

nNumerical:数值类型,分两类

基本数据类型:longintegershortbytedoublefloathalf_float

浮点数的高精度类型:scaled_float

nDate:日期类型

nArray:数组类型

nObject:对象

lindex:是否索引,默认为true,也就是说你不进行任何配置,所有字段都会被索引。

true:字段会被索引,则可以用来进行搜索

false:字段不会被索引,不能用来搜索

lstore:是否将数据进行独立存储,默认为false

原始的文本会存储在_source里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。

lanalyzer:分词器,这里的ik_max_word即使用ik分词器

3.2 查看映射

GET /student/_mapping

3.3 索引映射关联

PUT /student1
{
  "settings": {},
  "mappings": {
	  "properties": {
		"name":{
		  "type": "text",
		  "index": true
		  
		},
		"sex":{
		  "type": "text",
		  "index": false
		},
		"age":{
		  "type": "long",
		  "index": false
		}
	  }
  }
}

4. ES高级查询

Elasticsearch提供了基于JSON提供完整的查询DSL来定义查询

定义数据 :

POST /student/_doc/1001
{
"name":"zhangsan",
"nickname":"zhangsan",
    "sex":"男",
    "age":30
}
POST /student/_doc/1002
{
"name":"lisi",
"nickname":"lisi",
    "sex":"男",
    "age":20
}
POST /student/_doc/1003
{
"name":"wangwu",
    "nickname":"wangwu",
    "sex":"女",
    "age":40
}
POST /student/_doc/1004
{
"name":"zhangsan1",
"nickname":"zhangsan1",
    "sex":"女",
    "age":50
}
POST /student/_doc/1005
{
"name":"zhangsan2",
"nickname":"zhangsan2",
    "sex":"女",
    "age":30
}

4.1 查询所有文档:match_all

term查询,精确的关键词匹配查询,不对查询条件进行分词。

GET /student/_search
{
  "query":{
    "match_all": {}
  }
}

4.2 匹配查询:match

GET /student/_search
{
  "query": {
    "match": {
      "name": "zhangsan"
    }
  }
}

4.3 字段匹配查询:multi_match

GET /student/_search
{
  "query": {
    "multi_match": {
      "query": "zhangsan",
      "fields": ["name""nickname"]
    }
  }
}

4.4 关键字精确查询:term

GET /student/_search
{
  "query": {
    "term": {
      "name": {
        "value": "wangwu"
      }
    }
  }
}

4.5 多关键字精确查询:terms

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。

如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于mysql的in

GET /student/_search
{
  "query": {
    "terms": {
      "name": [
        "zhangsan",
        "lisi"
      ]
    }
  }
}

4.6 指定返回字段_source

默认情况下,Elasticsearch在搜索的结果中,会把文档中保存在_source的所有字段都返回。

如果我们只想获取其中的部分字段,我们可以添加_source的过滤

GET /student/_search
{
  "_source": "name"
  "query": {
    "terms": {
      "name": [
        "zhangsan"
      ]
    }
  }
}

4.7 过滤字段:includes

我们也可以通过:

includes:来指定想要显示的字段

excludes:来指定不想要显示的字段

GET /student/_search
{
  "_source": {
    "includes": ["name","nickname"]
  },  
  "query": {
    "terms": {
      "nickname": ["zhangsan"]
    }
  }
}

GET /student/_search
{
  "_source": {
    "excludes": ["name","nickname"]
  },  
  "query": {
    "terms": {
      "nickname": ["zhangsan"]
    }
  }
}

4.8 组合查询:bool

bool把各种其它查询通过must(必须 )、must_not(必须不)、should(应该)的方式进行组合

GET /student/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "zhangsan"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": 40
          }
        }
      ],
      "should": [
        {
          "match": {
            "sex": "男"
          }
        }
      ]
    }
  }
}

4.9 范围查询

range 查询找出那些落在指定区间内的数字或者时间。range查询允许以下字符

操作符

说明

gt

大于>

gte

大于等于>=

lt

小于<

lte

小于等于<=

GET /student/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 30,
        "lte": 35
      }
    }
  }
}

4.10 模糊查询

返回包含与搜索字词相似的字词的文档。

编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

更改字符(box → fox)
删除字符(black → lack)
插入字符(sic → sick)
转置两个相邻字符(act → cat)

为了找到相似的术语,fuzzy查询会在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展。然后查询返回每个扩展的完全匹配。

通过fuzziness修改编辑距离。一般使用默认值AUTO,根据术语的长度生成编辑距离。

GET /student/_search
{
  "query": {
    "fuzzy": {
      "name": {
        "value": "zhangsan"
      }
    }
  }
}

4.11 单字段排序

sort 可以让我们按照不同的字段进行排序,并且通过order指定排序的方式。desc降序,asc升序。

GET /student/_search
{
  "query": {
    "fuzzy": {
      "name": "zhangsan"
    }
  },
  "sort": [
    {
      "age": {
        "order" : "desc"
      }
    }
  ]
}

4.12 多字段排序

假定我们想要结合使用 age和 _score进行查询,并且匹配的结果首先按照年龄排序,然后按照相关性得分排序

GET /student/_search
{
  "query": {
    "fuzzy": {
      "name": "zhangsan"
    }
  },
  "sort": [
    {
      "age": {
        "order" : "desc"
      }
    },
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

4.13 高亮查询

在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。

Bing搜索"大数据"

Elasticsearch可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。

在使用match查询的同时,加上一个highlight属性:

lpre_tags:前置标签

lpost_tags:后置标签

lfields:需要高亮的字段

title:这里声明title字段需要高亮,后面可以为这个字段设置特有配置,也可以空

GET /student/_search
{
  "query": {
    "match": {
      "name": "zhangsan"
    }
  },
  "highlight": {
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>",
    "fields": {
      "name": {}
    }
  }
}

4.14 分页查询

from:当前页的起始索引,默认从0开始。 from = (pageNum - 1) * size

size:每页显示多少条

GET /student/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 2
}

4.15 聚合查询

聚合允许使用者对es文档进行统计分析,类似与关系型数据库中的group by,当然还有很多其他的聚合,例如取最大值、平均值等等。

对某个字段取最大值max

GET /student/_search
{
  "aggs":{
    "max_age":{
      "max":{"field":"age"}
    }
  },
  "size":0
}

4.16 桶聚合查询

桶聚和相当于sql中的group by语句

terms聚合,分组统计

GET /student/_search
{
  "aggs":{
    "age_groupby":{
      "terms":{"field":"age"}
    }
  },
  "size":0
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1189616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java通过FTP跨服务器动态监听读取指定目录下文件数据

背景&#xff1a; 1、文件数据在A服务器&#xff08;windows&#xff09;&#xff08;不定期在指定目录下生成&#xff09;&#xff0c;项目应用部署在B服务器&#xff08;Linux&#xff09;&#xff1b; 2、项目应用在B服务器&#xff0c;监听A服务器指定目录&#xff0c;有新…

UI设计软件有哪些好用和免费的吗?

在我们分享五个有用的原型工具之前&#xff0c;完成原型&#xff0c;将优化界面&#xff0c;这次是UI设计师的任务&#xff0c;UI设计软件对设计师非常重要&#xff0c;UI设计工具是否使用直接影响最终结果&#xff0c;然后有人会问&#xff1a;UI界面设计使用什么软件&#xf…

2021年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 Python 中函数不包括&#xff1f; A&#xff1a;标准函数 B&#xff1a;第三库函数 C&#xff1a;内建函数 D&#xf…

如何判断被DDoS攻击

当网络和设备正常的情况下&#xff0c;服务器突然出现连接断开、访问卡顿、用户掉线等情况;服务器CPU或内存占用率出现明显增长;网络出入流量出现明显增长;网站或应用程序突然出现大量的未知访问;登录服务器失败或者登录过慢等等。以上是最为常见的服务器被 DDoS攻击后出现的几…

【赠书第2期】嵌入式虚拟化技术与应用

文章目录 前言 1 背景概述 2 专家推荐 3 本书适合谁&#xff1f; 4 内容简介 5 书籍目录 6 权威作者团队 7 粉丝福利 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展&#xff0c;虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式…

鸿蒙开发工具的汉化

1、下载汉化包 汉化插件下载地址&#xff1a;Chinese (Simplified) Language Pack / 中文语言包 - IntelliJ IDEs Plugin | Marketplace 百度网盘下载地址&#xff1a;链接&#xff1a;百度网盘 请输入提取码 DevEco Studio是基于IDEA223版本&#xff0c;下载汉化包时请注意…

【经验模态分解】2.EMD的3个基本概念

/*** poject 经验模态分解及其衍生算法的研究及其在语音信号处理中的应用* file EMD的3个基本概念* author jUicE_g2R(qq:3406291309)* * language MATLAB/Python/C/C* EDA Base on matlabR2022b* editor Obsidian&#xff08;黑曜石笔记软件…

JVM之jinfo虚拟机配置信息工具

jinfo虚拟机配置信息工具 1、jinfo jinfo&#xff08;Configuration Info for Java&#xff09;的作用是实时地查看和调整虚拟机的各项参数。 使用jps -v 可以查看虚拟机启动时显示指定的参数列表&#xff0c;但是如果想知道未被显示指定的参数的系统默认值&#xff0c;除 …

SpringBoot测试类启动web环境-下篇

一、响应状态 1.MockMvcResultMatchers 说明&#xff1a;模拟结果匹配。 package com.forever;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoC…

数据分析实战 | 多元回归——广告收入数据分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型构建 八、模型预测 九、模型评价 一、数据及分析对象 CSV格式的数据文件——“Advertising.csv” 数据集链接&#xff1a;https://download.csdn.net/d…

Jmeter 性能压测 —— 混合场景

性能测试&#xff0c;单场景的目的一般是为了发现缺陷、发现瓶颈。 完成所有单个重点场景的性能测试之后&#xff0c;还需要做一个混合场景的性能测试-评估系统整体性能。 1、场景设计 使用Jmeter 做混合场景设计 在一个测试计划&#xff0c;将每个重点测试场景各创建为一个…

第五章:人工智能深度学习教程-人工神经网络(第一节-人工神经网络及其应用)

当您阅读这篇文章时&#xff0c;您体内的哪个器官正在思考这个问题&#xff1f;当然是大脑啦&#xff01;但你知道大脑是如何运作的吗&#xff1f;嗯&#xff0c;它有神经元或神经细胞&#xff0c;它们是大脑和神经系统的主要单位。这些神经元接收来自外界的感觉输入并进行处理…

基于SSM的电动车上牌管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Qt 自定义控件-支持换行和点击事件的Label

目录 前言1、功能描述2、代码实现2.1 头文件2.2 源码文件2.3 设计思路 3、示例4、总结 前言 本文主要介绍一个自定义控件&#xff0c;支持换行和点击事件的Label。起因是有这样一个需求&#xff0c;在一个复杂系统中有一个页面可以显示该系统中所有设备的名字&#xff0c;并且…

RSA 2048位算法的主要参数N,E,P,Q,DP,DQ,Qinv,D分别是什么意思 哪个是通常所说的公钥与私钥 -安全行业基础篇5

非对称加密算法RSA 在RSA 2048位算法中&#xff0c;常见的参数N、E、P、Q、DP、DQ、Qinv和D代表以下含义&#xff1a; N&#xff08;Modulus&#xff09;&#xff1a;模数&#xff0c;是两个大素数P和Q的乘积。N的长度决定了RSA算法的安全性。 E&#xff08;Public Exponent&a…

基于SSM的小区物业管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

获取请求IP以及IP解析成省份

某些业务需要获取请求IP以及将IP解析成省份之类的&#xff0c;于是我写了一个工具类&#xff0c;可以直接COPY /*** IP工具类* author xxl* since 2023/11/9*/ Slf4j public class IPUtils {/*** 过滤本地地址*/public static final String LOCAL_ADDRESS "127.0.0.1&quo…

基于SSM的演唱会购票系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue、HTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是…

Langchain-Chatchat实践详解

简介 本质上是在Langchain基础上封装的一层聊天服务&#xff0c;可以对接底层多种离线LLM和在线的LLM&#xff08;也可以对接自定义的在线LLM&#xff09;。提供基于知识库聊天功能相关的一系列API。 下载源码 源码地址&#xff1a; https://github.com/chatchat-space/Lang…