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":"", "post_tags": "", "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
创建索引和映射规则
#创建索引(空) 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
依赖
org.springframework.boot spring-boot-starter-data-elasticsearch
实体类
@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{ }
配置文件
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{ List findGoodsByNameLike(String name); }
测试类
@Test void test02(){ Listgood = goodsRepository.findGoodsByNameLike("耳机"); System.out.println(good); }
执行结果:
void test03(){ Goods goods = new Goods(1,"运动蓝牙耳机",new BigDecimal(488.00)); goodsRepository.delete(goods); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)