ElaticSearch本地环境安装及简单实用(Mac)

背景:最近由于工作需要,某些接口对于性能要求越来越高,同时也是希望自己的开发水平能有所提高,产出的接口性能可以尽可能的好,所以就使用了下当下非常火的ElaticSearch,也就是ES,初步使用感觉真的特别好用,很多关联查询瞬间性能提高几十上百倍,所以想要多研究下这方面的技术,决定在自己本地搭建ES搜索引擎

电脑:MacBook Pro

运行环境:Java 1.8.0

一、ES安装步骤

  1. 下载,很简单直接在官网下载就可以:
    下载链接:https://www.elastic.co/cn/downloads/elasticsearch
    在这里插入图片描述
  2. 下载完成后会自定解压,然后可以将文件夹按照自己的习惯移动,接下来就是使用了,解压后目录如下
    在这里插入图片描述
  3. 进入到ES的文件夹,输入命令启动ES
    bin/elasticsearch
    

在这里插入图片描述
看到这两个就表示启动成功了,接下来我们可以试一试,默认端口是9200,在浏览器输入localhost:9200,得到如下结果表示启动成功在这里插入图片描述4. 也可以直接在终端输入命令:curl -X GET http://localhost:9200/
也是一样的
在这里插入图片描述
到这里安装和调试就结束了,然后就是本地使用了,测试一下先

二、ElaticSearch索引

  1. 新建索引
    这里我们新建一个名为test的索引,执行下面的命令
    curl -X PUT 'localhost:9200/test'
    
    可以看到新建完后服务器会返回acknowledged为true,表示创建成功在这里插入图片描述
  2. 查看当前节点下的所有索引
     curl -X GET 'http://localhost:9200/_cat/indices?v'
    
    我们可以看到我本地只有这一个索引在这里插入图片描述
  3. 删除索引
    执行下面的命令,同样会返回acknowledged为true,表示删除成功,这时我们再去查看当前节点下的所有索引就发现没有了
    curl -X DELETE 'localhost:9200/test'
    
    为了下面的测试,我们重新建立刚才的索引

三、简单数据操作

  1. 新增数据
    先建mapping结构
	curl -X PUT "localhost:9200/test" -H 'Content-Type:application/json' -d'
{
   "mappings":{
        "person":{
            "properties":{
                "id":{
                    "type":"long",
                    "fields":{
                        "keyword":{
                            "type":"keyword",
                            "ignore_above":256
                        }
                    }
                },
                "name":{
                    "type":"keyword",
                    "fields":{
                        "keyword":{
                            "type":"keyword",
                            "ignore_above":256
                        }
                    }
                },
                "age":{
                    "type":"integer",
                    "fields":{
                        "keyword":{
                            "type":"keyword",
                            "ignore_above":4
                        }
                    }
                },
                "gender":{
                    "type":"keyword",
                    "fields":{
                        "keyword":{
                            "type":"keyword",
                            "ignore_above":4
                        }
                    }
                }
            }
        }
    }
}'

mapping建好以后可以直接新增数据了,这里我们建一个简单的对象,其实这里可以直接新增数据,但是那样会导致数据类型可能会出现问题,所以最好还是先建好对应的映射文件

	curl -X POST 'localhost:9200/test/person/1' -H 'Content-Type:application/json' -d '
        {
          "id":1,
          "name": "张三",
          "age": 25,
          "gender": "男"
        }'
  1. 根据Id查询单个数据
curl 'localhost:9200/test/person/1?pretty=true'

在这里插入图片描述
URL 的参数pretty=true表示以易读的格式返回。
返回的数据中,found字段表示查询成功,_source字段返回原始记录
3. 修改记录
修改其实就是将同一个数据主键对应的数据重新发一次,就会自动替换掉
在这里插入图片描述
细心的话会发现重新查出来的数据version变成了3,这里解释下这个字段,没对单条数据操作一次版本就会加一,而且请求的返回值中result变成了update,说明这条不是新增的
4. 删除单个数据

curl -X DELETE 'localhost:9200/test/person/1'
  1. 查询所有
    这里我事先手动插入了几条数据
    使用命令:
curl 'localhost:9200/test/person/_search'

在这里插入图片描述
返回结果的 字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,hits字段表示命中的记录,里面子字段的含义如下:
took:操作的耗时(单位为毫秒)
timed_out:表示是否超时
total:返回记录数,本例是6条。
max_score:最高的匹配程度,本例是1.0。
hits:命中的记录,返回的记录组成的数组。

四、ES全文检索

Elastic 的查询非常特别,使用自己的查询语法,要求 GET 请求带有数据体

  1. 匹配查询
    1.1 单个匹配
curl 'localhost:9200/test/person/_search'  -H 'Content-Type:application/json' -d '
{
  "query" : { "match" : { "name" : "李四" }}
}'

上面代码使用 Match 查询,指定的匹配条件是name字段里面"李四"这个名字
在这里插入图片描述
Elastic 默认一次返回10条结果,可以通过size字段改变这个设置

curl 'localhost:9200/test/person/_search'  -H 'Content-Type:application/json' -d '
{
  "query" : { "match" : { "name" : "李四" }},
  "size": 1
}'

1.2 多条件匹配

curl 'localhost:9200/test/person/_search' -H 'Content-Type:application/json' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "王五" } },
        { "match": { "gender": "男" } }
      ]
    }
  }
}'

上面代码使用 bool 查询,指定的匹配条件是name":"王五"加上gender:"男"同时命中才可以
在这里插入图片描述
可以看出,当我用王二加上性别为男去查询的时候没有找到,换成王五+男可以查到

bool 查询又可以细分成,must,must_not 和 should ,这几个结合使用
must表示必须匹配(或者包含),must_not表示必须不匹配(或者包含),should表示必须同时命中才可以,这里就不详细使用了,下一篇跟随java代码一起介绍

五、补充

mapping中参数类型:
1.text 字符串,分词,全文索引
2.keyword 关键字,不分词,适合id,email等这种不分词的字段
3.数字类型有integer、long、short、byte、double、float等类型
4.date 时间类型
5.boolean 布尔类型

查询返回值参数含义:
took:是查询花费的时间,毫秒单位。
time_out:标识查询是否超时。
_shards:描述了查询分片的信息,查询了多少个分片、成功的分片数量、失败的分片数量等。
hits:搜索的结果,total是全部的满足的文档数目,hits是返回的实际数目(默认是10)。
_score是文档的分数信息,与排名相关度有关,参考各大搜索引擎的搜索结果,就容易理解。
total:1;(代表当前ES里总数只有一条数据,不管你发送任何请求,ES都会把总数返回)
_index:我们指定查询的索引(类似数据库的某个库)。
_type:我们指定查询的文档(类似数据库的某张表)
_id:查询指定的id。
_source:查询的具体返回数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值