1、 Elastic Search介绍
2、 Elastic Search下载安装
(1)windows
官网地址:
https://www.elastic.co/cn/
官方文档
https://www.elastic.co/guide/index.html
下载完压缩包,直接解压,启动bin下的elasticsearch.bat
(2)LINUX安装
(i)将压缩包放到对应目录下
(ii)解压压缩包,重命名
(iv)因为安全问题,不能用root运行程序,则我们需要创建一个新用户es7,然后将文件夹创建用户转为es7
useradd es7
passwd es7
chown -R es7:es7 /opt/es7.8.0
(v)修改es的配置文件/config/elasticsearch.yml
cluster.name: elasticsearch 【自定义,但子结点要与该名一致】
node.name: node-1001 【自定义结点名称】
network.host: 0.0.0.0 【指定ip】
http.port: 9200 【设置端口】
cluster.initial_master_nodes: ["node-1"] 【指定主结点】
(vi)修改环境的/etc/security/limits.conf
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es7 soft n ofile 65536
es7 hard nofile 65536
(vii)修改/etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
# 操作系统级别对每个用户创建的进程数的限制
* hard nproc 4096
# 注:* 带表Linux所有用户名称
(viii)修改/etc/sysctl.conf
# 在文件中增加下面内容
# 一个进程可以拥有的VMA(虚拟内存区域)的数量,默认值为65536
vm.max_map_count=655360
(XI)刷新
sysctl -p
(X)启动es
进入bin目录
#启动
./elasticsearch
#后台启动
./elasticsearch -d
测试是否成功启动:
用浏览器请求以下url,显示如下代表启动成功!
http://localhost:9200/
ES的各url用处
(1)创建索引【put请求 注意:索引名要小写 eg:shopping】
http://127.0.0.1:9200/shopping
【注意:同一个索引只能发一次索引请求,发多次会报以下错误
】
(2)查看所有索引【get请求】
http://127.0.0.1:9200/_cat/indices?v
(3)查看单个索引【get请求】
http://127.0.0.1:9200/shopping
(4)删除索引【delete请求】
http://127.0.0.1:9200/jackstyle
3、 Elastic Search文档使用
(1)文档创建【post请求 /shopping/_doc/1002: /索引名/文档名/自定义id(响应值:_id)
】【注意:id可以不需要并且文档名称也可以自定义:eg:/shopping/_create
】
http://127.0.0.1:9200/shopping/_doc/1002
加入内容
{
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999.00
}
(2)查询文档某个数据【get请求 注意:无论之前创建时用的文档类型是什么查询时url都是_doc】
http://127.0.0.1:9200/shopping/_doc/1001
(3)查询文档所有数据【get请求】
http://127.0.0.1:9200/shopping/_search
(4)修改文档数据【put请求】
http://127.0.0.1:9200/shopping/_doc/1002
(5)指定对象修改文档数据【post请求】
http://127.0.0.1:9200/shopping/_doc/1002
(6)删除文档数据【delete请求】
http://127.0.0.1:9200/shopping/_doc/1002
(7)根据条件查询文档数据【get请求】
http://127.0.0.1:9200/shopping/_search?q=category:小米
(8)根据请求体查询文档数据【get请求,使用json报文请求】
http://127.0.0.1:9200/shopping/_search
(9)分页查询文档数据【get请求】
(10)多条件查询文档数据【get请求】
http://127.0.0.1:9200/shopping/_search
A:使用must,必须满足所有条件才会查询出来【相当于and】
{
"query": {
"bool": {
"must": [
{
"match": {
"category": "小米"
}
},
{
"match": {
"price": 3999.00
}
}
]
}
}
}
B:使用should,则是满足其中一个即可【相当于or】
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "小米"
}
},
{
"match": {
"price": 3999.00
}
}
]
}
}
}
(11)范围查询文档数据【get请求】
http://127.0.0.1:9200/shopping/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "小米"
}
}
],
"filter":{
"range":{
"price": {
"gt":4000
}
}
}
}
}
}
条件:价格大于4000
(12)全文索引以及完全匹配查询文档数据【get请求】
http://127.0.0.1:9200/shopping/_search
--全文索引
{
"query": {
"match": {
"category": "米"
}
}
}
{
"query": {
"match": {
"category": "米华"
}
}
}
--完全匹配
{
"query": {
"match_phrase": {
"category": "米华"
}
}
}
–全文索引 【扩展:即模糊查询,es查询时会对条件文本进行拆解
】
–完全匹配
(13)高亮显示数据【get请求】
http://127.0.0.1:9200/shopping/_search
{
"query": {
"match_phrase": {
"category": "小米"
}
},
"highlight": {
"fields": {
"category": {
}
}
}
}
(14)聚合查询【get请求】
http://127.0.0.1:9200/shopping/_search
--分组查询
{
"aggs": {
"price_group": {
"terms": {
"field":"price"
}
}
}
}
-----------------------------------------------------------------------------------------------------
--求平均值
{
"aggs": {
"price_avg": {
"avg": {
"field":"price"
}
}
},
"size":0 -不展示数据hits
}
–分组查询
–求平均值
(15)创建字段映射【字段约束】put请求
http://127.0.0.1:9200/user/_mapping
{
"properties": {
"name": {
"type": "text", --文本类型,可以根据其模糊查询
"index": true
},
"sex": {
"type": "keyword", --必须完全匹配查询
"index": true
},
"age": {
"type": "keyword",
"index": false --不能根据其查询
}
}
}
–get查询:
http://127.0.0.1:9200/user/_search
3、es的java Api
A:简单操作
(1)依赖
implementation group: 'org.elasticsearch', name: 'elasticsearch', version: '7.8.0'
implementation group: 'org.elasticsearch.client', name: 'elasticsearch-rest-high-level-client', version: '7.8.0'
(2)创建连接
// 创建ES客户端
RestHighLevelClient esClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
// 关闭ES客户端
esClient.close();
(3)创建索引
public static void main(String[] args) throws Exception {
RestHighLevelClient esClient = EsUtils.getESClient();
// 创建索引
CreateIndexRequest request = new CreateIndexRequest("testdemo");
CreateIndexResponse createIndexResponse =
esClient.indices().create(request, RequestOptions.DEFAULT);
// 响应状态
boolean acknowledged = createIndexResponse.isAcknowledged();
System.out.println("索引操作 :" + acknowledged);
esClient.close();
}
(4)删除索引
public static void main(String[] args) throws Exception {
RestHighLevelClient esClient = EsUtils.getESClient();
// 查询索引
DeleteIndexRequest request = new DeleteIndexRequest("testdemo");
AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);
// 响应状态
System.out.println(response.