Elasticsearch基础

ES软件安装前面说过

MySQL	数据库		表		行			列
ES		Index	  Type	  Document	   Filed	

Type ES6一个Index中只支持一个Type,ES7中不建议自定义Type

Index操作

创建索引

#创建索引
PUT test4

在这里插入图片描述

删除索引

#删除索引
DELETE test4

在这里插入图片描述

查看所有索引

#查看所有索引
GET _cat/indices

在这里插入图片描述

显示标题

#显示标题
GET _cat/indices?v

在这里插入图片描述

查看单个索引信息

#查看单个索引信息
GET test4

在这里插入图片描述

创建索引指定参数

#创建索引指定参数
PUT test5
{
  "settings" : {
      "index" : {
        "number_of_shards" : "5",
        "number_of_replicas" : "0"
        }
    }
    
}

在这里插入图片描述

Document

添加数据

#添加数据 _doc就是默认的Type名字
#没有指定id,ES自动分配
POST test4/_doc
{
  "sid":"1",
  "sname":"zs"
}

在这里插入图片描述

#指定ID
POST test4/_doc/4
{
  "sid":"2",
  "sname":"zl"
}

在这里插入图片描述

#PUT也可以添加数据,底层有幂等性检查:执行操作必须有检查
PUT test4/_doc/4
{
  "sid":"4",
  "sname":"zl"
}

在这里插入图片描述

#添加数据
PUT test4/_create/5
{
  "sid":"5",
  "sname":"aaa",
  "age":"11"
}

在这里插入图片描述

#PUT/POST执行相同的ID就是update
#添加数据指定Index和自定义Type不建议使用
PUT test2/table1/2
{
  "sid":"1",
  "sname":"abcd"
}

在这里插入图片描述

查看数据

#查看数据
GET /test4/_search

在这里插入图片描述

多条件查询

#must:多条件查询
GET test4/_search
{
  "query":{
    "bool":{
      "must":[
          {
            "match":{
              "sname":"zs"
            }
          },
          {
            "match":
            {
              "sid":"1"  
            }
          }
        ]
      }
    }
  }
}

在这里插入图片描述

或查询

#should 多条件 or
GET test4/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "match":{
            "sname":"zs"
          }
        },
        {
          "match":{
            "sid":"2"
          }
        }
      ]
    }
  }
}

在这里插入图片描述

范围匹配

#范围匹配:gt大于, lt小于 gte、ge大于等于 lte、le 小于等于
GET test4/_search
{
  "query":{
    "bool":{
      "must":[
        {
          "match":{
            "sname":"zs"
          }
        }
      ],
      "filter":{
        "range":{
          "sid":{
            "gte":2
          }
        }
      }
    }
  }
}

在这里插入图片描述

高亮显示

#高亮显示
GET test4/_search
{
  "query":{
    "match":{
      "sname":"zs"
    }
  },
  "highlight":{
    "pre_tags":"<font color='red'>",
    "post_tags": "</font>",
    "fields": {
      "sname": {}
    }
  }
}

在这里插入图片描述

查看分词效果

#查看分词效果
GET _analyze
{
  "analyzer": "standard",
  "text": "z s"
}

在这里插入图片描述

#查看分词效果:未安装分词插件,是不支持中文分词的
GET _analyze
{
  "analyzer": "standard",
  "text": "深海泰坦"
}

在这里插入图片描述

#查看分词效果:安装分词插件之后
GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "深海泰坦"
}

在这里插入图片描述

从数据库导入数据到ES

单表导入

配置文件

input {
	stdin {
	}
	jdbc {
		jdbc_connection_string => "jdbc:mysql://192.168.195.157:3306/customers"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_user => "root"
		jdbc_password => "7777"
		jdbc_paging_enabled => "true"
		jdbc_page_size => "50000"	
		#要执行的sql文件
		statement_filepath => "/opt/elasticsearch/logstash-7.4.2/config/customer.sql"
		#statement => "select from "
		#定时字段各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
		schedule => "* * * * *"
		type => "customer"
	}
}

output {
	if[type] == "customer"{
		elasticsearch {
			#ESIP地址与端口
			#hosts => "localhost:9200"
			hosts => ["localhost:9200"]
			#ES索引名称
			index => "customer"
			#文档_id, %{cid}意思是取查询出来的cid的值,并将其映射到es的_id字段中
			document_id => "%{cid}"
		}
	}
	stdout {
		# JSON格式输出
		codec => json_lines
	}
}

customer.sql

select * from customer

测试启动

./bin/logstash -f ./config/customer.conf -t

image-20220118114407518
创建索引和映射规则

#创建索引()
curl -XPUT http://localhost:9200/customer

#设置映射规则
curl -XPOST http://localhost:9200/customer/_mapping -H 'Content-Type:application/json' -d'
{
        "properties": {
            "description": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart"
            }
        }

}'

在这里插入图片描述
在这里插入图片描述
启动logstash

./bin/logstash -f ./config/customer.conf

在这里插入图片描述
在这里插入图片描述
只要看到写入sql就一个没问题了,导入成功如下图
在这里插入图片描述

我们查询中华也能查到
在这里插入图片描述
修改数据库字段
在这里插入图片描述

多表导入

创建另一张表的索引以及映射关系

curl -XPUT http://localhost:9200/province

curl -XPOST http://localhost:9200/province/_mapping -H 'Content-Type:application/json' -d'
{
        "properties": {
            "pname": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart"
            }
        }

}'

在这里插入图片描述

在这里插入图片描述
customer.conf配置文件

input {
	stdin {
	}
	jdbc {
		jdbc_connection_string => "jdbc:mysql://192.168.195.157:3306/customers"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_user => "root"
		jdbc_password => "7777"
		jdbc_paging_enabled => "true"
		jdbc_page_size => "50000"	
		#要执行的sql文件
		statement_filepath => "/opt/elasticsearch/logstash-7.4.2/config/customer.sql"
		#statement => "select from "
		#定时字段各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
		schedule => "* * * * *"
		type => "customer"
	}
	jdbc {
		jdbc_connection_string => "jdbc:mysql://192.168.195.157:3306/customers"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_user => "root"
		jdbc_password => "7777"
		jdbc_paging_enabled => "true"
		jdbc_page_size => "50000"	
		#要执行的sql文件
		#statement_filepath => "/opt/elasticsearch/logstash-7.4.2/config/customer.sql"
		statement => "select * from province"
		#定时字段各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
		schedule => "* * * * *"
		type => "province"
	}
}

output {
	if[type] == "customer"{
		elasticsearch {
			#ESIP地址与端口
			#hosts => "localhost:9200"
			hosts => ["localhost:9200"]
			#ES索引名称
			index => "customer"
			#文档_id, %{cid}意思是取查询出来的cid的值,并将其映射到es的_id字段中
			document_id => "%{cid}"
		}
	}
	if[type]=="province"{
		elasticsearch {
			#ESIP地址与端口
			#hosts => "localhost:9200"
			hosts => ["localhost:9200"]
			#ES索引名称
			index => "province"
			#文档_id, %{cid}意思是取查询出来的cid的值,并将其映射到es的_id字段中
			document_id => "%{pid}"
		}
	}
	stdout {
		# JSON格式输出
		codec => json_lines
	}
}

启动logstash

./bin/logstash -f ./config/customer.conf

看到这两条sql语句就没什么问题
在这里插入图片描述
我们在customer.conf 中写了type 的所以这里的字段就有个type,如果我们 mysql 中也有type字段就会导不进来,遇到这种情况我们可以给数据库字段取别名,示例:select pid,pname,type as ptype from provice
在这里插入图片描述

SpringBoot简单整合Elasticsearch

在这里插入图片描述

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

实体类

@NoArgsConstructor
@AllArgsConstructor
@Data
@Document(indexName = "acoffee")
public class Goods {
    @Id
    private int id;
    @Field(index = true,analyzer = "ik_smart",type = FieldType.Text)
    private String name;
    @Field(index = false,store = true,type = FieldType.Double)
    private BigDecimal price;
}

自定义接口

//也可以继承ElasticsearchRepository接口 他们之间的关系图在最上面
public interface GoodsRepository extends CrudRepository<Goods,Integer> {
}

配置文件

spring:
  elasticsearch:
    rest:
      uris: http://192.168.195.157:9200

增加、修改

测试类

@Autowired
GoodsRepository goodsRepository;

@Test
void test01(){
    Goods goods = new Goods(1,"运动蓝牙耳机",new BigDecimal(488.00));
    goodsRepository.save(goods);
}

执行结果:
在这里插入图片描述

查询

在接口中使用我们自己的方法(我们一边写它会一边提示方法名)

public interface GoodsRepository extends  CrudRepository<Goods,Integer> {
    List<Goods> findGoodsByNameLike(String name);
}

测试类

@Test
void test02(){
    List<Goods> good = goodsRepository.findGoodsByNameLike("耳机");
    System.out.println(good);
}

执行结果:
在这里插入图片描述

删除

    void test03(){
        Goods goods = new Goods(1,"运动蓝牙耳机",new BigDecimal(488.00));
        goodsRepository.delete(goods);
    }

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值