Elasticsearch基础

Elasticsearch基础,第1张

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":"",
    "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

SpringBoot简单整合Elasticsearch

依赖


    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(){
    List good = goodsRepository.findGoodsByNameLike("耳机");
    System.out.println(good);
}

执行结果:

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5711291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存