ES-搜索引擎

什么是ElasticSearch?

 es能干嘛

 

 

 lucene和es的关系

ES的核心概念:

1、近实时

2、Cluster

集群,

 3、节点Node

*4、Document&field

*5、index

*6、type

type在7的版本已经移除掉了,但是目前还能用,

 7、shard

分片

 

8、replica

以上概念和数据库对比

 ES的安装

ES端口:9200

kibana端口:5601

 ES的一个可视化工具:kibana

注意:ES和kibana版本要相对应才能使用!

基本操作

基本检索

 商品的CRUD        

新建文档,建立索引

 

 post

不指定id则自动生成id,它给的id,永远都为创建

 指定id,指定了已存在的id,为修改,并增加版本号

 ​​​​

  指定id,指定了不存在的id,为创建

put:

必须指定id

 总结:

查询

get

 并发操作:带版本号操作

 

修改:替换

新版:PUT /ecommerce/_doc/1 {}

修改:更新

新版:

 

老版:

删除

 批量新增

 

 批量增删改

增加测试数据

数据是官方提供的

使用批量新增,

 批量查询

ES搜索

支持的搜索:

query String Search

 query DSL(常用)

查询所有,并排序

 query DSL

格式

from返回部分字段

查询所有的商品

 

query/match匹配查询

 

分页

 query/match_phrase[不拆分匹配]

包含不分词

 

query/multi_math[多字段匹配]

或的关系

query/bool/must[复合查询]

与的关系

 

 

匹不匹配的上都不会影响,能匹配就匹配上,匹配不到也不影响结果 ​​​​ ,但会贡献得分

query/filter[结果过滤]

在gte和lte之间,大于等于gte小于等于lte

 

query/term

 

highlight search(高亮搜索结果)

 还可以改写高亮:

聚合分析

格式

搜索address中包含mill的所有人的年龄平均分布以及平均年龄,但不显示这些人的详情

 

 2、按照年龄聚合,并且求这些年龄段的这些人的平均薪资

 

 

3、查出所有年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资水平

 

 

计算每个tag下的商品数量

对名称中包含yaogao的商品,计算每个tag下的商品数量

 计算每个tag下的商品的平均价格

 计算每个tag下的商品的平均价格,并且按照平均价格降序排序

按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格

sum、max、mix,avg

type也可以是这几种

Mapping的映射

文档

 查看Mapping信息

新版本改变

创建映射

查看映射 

添加映射

 更新映射只有进行数据迁移

 

nested

分词器

基本介绍 

 使用分词器

安装ik分词器

 自己添加词库

ES的java操作

两种操作方式

方式一:

9300 tcp连接

方式二:

9200 http连接

 springboot整合

导入依赖

<properties>
    <java.version>11</java.version>
    <!--指定elasticsearch版本 -->
    <elasticsearch.version>7.14.1</elasticsearch.version>
</properties>
<!--导入ES-->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.14.1</version>
</dependency>
<!--导入fastjson依赖 转换json-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.75</version>
</dependency>

 配置类

@Configuration
public class ESConfig {

    public static final RequestOptions COMMON_OPTIONS;

    static{
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        COMMON_OPTIONS = builder.build();
    }

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestClientBuilder builder = null;
        builder  = RestClient.builder(new HttpHost("192.168.79.91",9200,"http"));
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
        return restHighLevelClient;
    }

}

简单测试

增加:

 @Autowired
    private RestHighLevelClient esClient;
    @Test
    public void insertTest(){
        IndexRequest request = new IndexRequest("emp");//创建索引
        request.id("9527");//设置id
        //数据
        Emp emp = new Emp();
        emp.setEmpno(9527);
        emp.setEname("周星星");
        emp.setJob("干饭");

        //转换json
        String jsonString = JSONObject.toJSONString(emp);
        request.source(jsonString, XContentType.JSON);

        try {
            esClient.index(request, ESConfig.COMMON_OPTIONS);
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
    }

查询:

@Autowired
    private RestHighLevelClient esClient;
    //查询
    @Test
    public void getTest(){
        GetRequest getRequest = new GetRequest("emp");
        getRequest.id("9527");
        try {
            GetResponse response = esClient.get(getRequest, ESConfig.COMMON_OPTIONS);
            log.info("----------->"+response);
            log.info("----------->"+response.getSource());
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值