ElaticSearch本地环境安装及简单使用
背景:最近由于工作需要,某些接口对于性能要求越来越高,同时也是希望自己的开发水平能有所提高,产出的接口性能可以尽可能的好,所以就使用了下当下非常火的ElaticSearch,也就是ES,初步使用感觉真的特别好用,很多关联查询瞬间性能提高几十上百倍,所以想要多研究下这方面的技术,决定在自己本地搭建ES搜索引擎
电脑:MacBook Pro
运行环境:Java 1.8.0
一、ES安装步骤
- 下载,很简单直接在官网下载就可以: 下载链接:
- 下载完成后会自定解压,然后可以将文件夹按照自己的习惯移动,接下来就是使用了,解压后目录如下
- 进入到ES的文件夹,输入命令启动ES
bin/elasticsearch
看到这两个就表示启动成功了,接下来我们可以试一试,默认端口是9200,在浏览器输入localhost:9200,得到如下结果表示启动成功4. 也可以直接在终端输入命令:curl -X GET 也是一样的 到这里安装和调试就结束了,然后就是本地使用了,测试一下先
二、ElaticSearch索引
- 新建索引 这里我们新建一个名为test的索引,执行下面的命令
curl -X PUT 'localhost:9200/test'
可以看到新建完后服务器会返回acknowledged为true,表示创建成功
- 查看当前节点下的所有索引
curl -X GET 'http://localhost:9200/_cat/indices?v'
我们可以看到我本地只有这一个索引
- 删除索引 执行下面的命令,同样会返回acknowledged为true,表示删除成功,这时我们再去查看当前节点下的所有索引就发现没有了
curl -X DELETE 'localhost:9200/test'
为了下面的测试,我们重新建立刚才的索引
三、简单数据操作
- 新增数据 先建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": "男"
}'
- 根据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'
- 查询所有 这里我事先手动插入了几条数据 使用命令:
curl 'localhost:9200/test/person/_search'
返回结果的 字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,hits字段表示命中的记录,里面子字段的含义如下: took:操作的耗时(单位为毫秒) timed_out:表示是否超时 total:返回记录数,本例是6条。 max_score:最高的匹配程度,本例是1.0。 hits:命中的记录,返回的记录组成的数组。
四、ES全文检索
Elastic 的查询非常特别,使用自己的查询语法,要求 GET 请求带有数据体
- 匹配查询 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:查询的具体返回数据。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1466.html