热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搜索引擎ElasticSearch基本操作(学习笔记)

最近开始接触搜索引擎ElasticSearch,学习过程中可能会遗忘很多东西,因此我选择通过写文章的方式记录自己的学习过


说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正。若在阅读时有任何的问题,也可通过评论提出,本人将根据自身能力对问题进行一定的解答。




01

前言


最近开始接触搜索引擎ElasticSearch,学习过程中可能会遗忘很多东西,因此我选择通过写文章的方式记录自己的学习过程,方便日后的复习。本人对于ElasticSearch的入门学习是通过慕课网的瓦力老师
的课程进行学习的,大家如果也想对ElasticSearch进行入门的学习,也可以通过下面的链接观看。

ElasticSearch入门:https://www.imooc.com/learn/889



02

安装启动Elasticsearch


对于ElasticSearch,我们可以到官网进行下载https://www.elastic.co/cn/downloads/elasticsearch

1.安装

根据自己的需求下载对应的版本,解压即可

2.启动

下载并解压后,进入安装目录下载bin目录,双击启动elasticsearch.bat即可(我的是window版本)。启动成功后命令行显示如下:
此时我们访问http://localhost:9200/,如果有以下信息打印出来表示elasticsearch已经成功启动成功

03

安装es可视化插件


可视化插件我们选用elasticsearch-head
,使用易上手。具体github下载地址:https://github.com/mobz/elasticsearch-head与elasticsearch类似,下载下来后解压即可。

找到安装目录,点击打开index.html进入可视化页面,如下


04

Elasticsearch基本用法


对elasticsearch的操作,我们将会使用postman发送http请求做具体的操作,因此还未下载postman的小伙伴们可以去postman的官网下载:https://www.postman.com/downloads/

1.RESTFul API

API基本格式:
http://:/<索引>/<类型>/<文档id>
常用HTTP动词:
 GET/PUT/POST/DELETE

2.创建索引

当我们需要创建一个名为people
的索引进行结构化的创建时,我们需要使用postman对http://localhost:9200/people发送 PUT 请求,并在请求体body
带上具体的json数据。即:

HTTP请求格式:http://:/<索引>
(例如:http://localhost:9200/people)
HTTP动词:PUT

HTTP请求体json信息如下:

{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "integer"
}
}
}
}

参数说明:
number_of_shards
:索引分片数量

number_of_replicas
:索引备份数量

mappings
:索引结构化格式映射关键字

properties
:设置索引的属性

具体操作如下:
当我们的请求执行成功后,我们打开可视化插件elasticsearch-head可以查看到我们新创建的people索引已经显示出来了,查看其具体信息如下:

3.插入文档

HTTP请求格式:http://:/<索引>/<类型>/<文档id>
(由于es从6开始已经不支持多类型,所有的类型都为 _doc 。例如:http://localhost:9200/people/_doc/1/ )
HTTP动词:PUT

HTTP请求体json信息如下:

{
"name": "张三",
"age": 19
}

4.修改文档

HTTP请求格式:http://:/<索引>/<类型>/<文档id>/_update
(例如:http://localhost:9200/people/_doc/1/_update)
HTTP动词:POST

HTTP请求体json信息如下:

{
"doc": {
"name": "李四"
}
}

5.删除文档/索引

HTTP请求格式:

  • 删除文档:http://:/<索引>/<类型>/<文档id>
     (例如:http://localhost:9200/people/_doc/1/)

  • 删除索引:http://:/<索引>
     (例如:http://localhost:9200/people)

HTTP动词:DELETE

HTTP请求体json信息:无需json数据

6.查询操作

  • 查询前准备
    查询操作的前提是我们拥有足够的数据才可以进行查询操作,因此,我们需要使用上面学会的插入操作对对索引增加几个文档,提供我们测试查询操作。

  • ①:简单查询
    HTTP请求格式:http://:/<索引>/<类型>/<文档id>
    (例如:http://localhost:9200/people/_doc/1)
    HTTP动词:GET

    HTTP请求体json信息:无需json数据

  • ②:查询索引下所有文档
    HTTP请求格式:http://:/<索引>/_serach
    (例如:http://localhost:9200/people/_search)
    HTTP动词:GET/POST

    HTTP请求体json信息如下:

{
"query": {
"match_all": {}
}
}

查询结果如下:

  • ③:条件查询
    HTTP请求格式:http://:/<索引>/_serach
    (例如:http://localhost:9200/people/_search)
    HTTP动词:GET/POST

    HTTP请求体json信息如下:

{
"query": {
"match": {
"name": "治"
}
},
"from": 1,
"size": 1,
"sort": [
{
"_id": {
"order": "asc"
}

  • ④:聚合查询
    HTTP请求格式:http://:/<索引>/_serach
    (例如:http://localhost:9200/people/_search)
    HTTP动词:GET/POST

    HTTP请求体json信息如下:

{
"aggs": {
"group_by_id": {
"terms": {
"field": "_id"
}
}
}
}


查询结果如下:

  • ④:聚合计算
    HTTP请求格式:http://:/<索引>/_serach
    (例如:http://localhost:9200/people/_search)
    HTTP动词:GET/POST

    HTTP请求体json信息如下:

{
"aggs": {
"grades_id": {
"stats": {
"field": "age"
}
}
}
}

查询结果如下:


05

高级查询


1.query

  • ①模糊匹配(当我们查找山治
    时,es会查找与
    ,和
    能够匹配的数据,因此,在模糊条件下查找山治
    这一数据,将会把伊治
    尼治
    勇治
    都返回回来)

{
"query": {
"match": {
"name": "山治"
}
}
}

  • ②习语匹配(习语匹配与模糊匹配不同,当需要配匹山治
    时,只会返回包含山治
    的数据,并不会返回与之类似的)

{
"query": {
"match_phrase": {
"name": "山治"
}
}
}

  • ③多个字段的模糊匹配查询

{
"query": {
"multi_match": {
"query": "1",
"fields": ["_id", "age"]
}
}
}

  • ④OR的使用(模糊查找包含

    de 数据)

{
"query": {
"query_string": {
"query": "(伊) OR (山)"
}
}
}

  • ④字段查询

{
"query": {
"term": {
"age": 18
}
}
}

  • ⑤范围查询

{
"query": {
"range": {
"age": {
"gte": 1,
"lte": 20
}
}
}
}

2.filter

Filer Content在查询的过程中只判断该文档是否满足条件,只有Yes和No

{
"query": {
"bool": {
"filter": {
"term": {
"age": 18
}
}
}
}
}

3.复合查询

  • ①固定分数查询(如下,查询固定分数为2的数据)

{
"query": {
"constant_score": {
"filter": {
"match": {
"name": "山治"
}
},
"boost": 2
}
}
}

  • ②布尔查询(如下:查询age应为18,name中包含“山”的数据)

{
"query": {
"bool": {
"should": [
{
"match": {
"age": 18
}
},
{
"match": {
"name": "山"
}
}
]
}
}
}



推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
author-avatar
区小靜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有