ELasticSerach

ELasticSerach 7.9.2安装过程

1.windows下总安装文件

分为以下步骤
ELasticSerach 搜索引擎
ELasticSerach-head 可视化界面
kiBana 请求器
ik 分词器
相关华为镜像下载地址:
ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D

1.1 ELasticSerach

下载地址

ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D

出现闪退的原因
一种是内存过大,则需要调整

config/jvm.options

在这里插入图片描述
另一种原因则

config/elasticSerach.yml

在该文件下添加以下命令

xpack.ml.enabled: false

1.2 elasticsearch-head-master 可视化界面

下载地址:https://github.com/mobz/elasticsearch-head

在目录下安装即可
cnpm install
npm run start

解决跨域问题
则在ElasticSearch目录下

config/elasticSerach.yml
添加

http.cors.enabled: true
http.cors.allow-origin: "*"

1.3 kibana-7.9.2-windows-x86_64

下载地址
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D
修改目录config/kibana.yml
`i18n.locale: “zh-CN”

1.4 ik分词器

下载地址:
https://github.com/medcl/elasticsearch-analysis-ik/tags

注意版本要跟ElasticSearch一致
采用倒排排序,先找词再找文档。

直接把文件目录放在elasticsearch目录下的plugins里,新建ik文件夹,重开
elasticsearch即可自动加入插件

需要添加自己定义的分词库
则在

ik/config/IKAnalyzer.cfg.xml添加
并自定义建立dic文件

ELasticSerach 核心概念

与传统数据库对应

传统数据库ES
数据库索引
类型
记录文档
属性

并且采用的是倒排排序。

Rest风格

请求方法url说明
PUT/索引名/类型名/文档名新建
POST/索引名/类型名/文档名_update更新
GET/索引名/类型名/文档名搜索
DELETE/索引名/类型名/文档名删除
GET/索引名/类型名/_search复合搜索
PUT/索引名/类型名/文档名更新

命令

  • 基础

PUT /index/_doc/1
{
“name” : “czx”,
“ago” : 23
}
// 创建文档,_doc为默认文档类型

PUT /index/
{
“mappings” :{
properties:{
name:{
“type”:“text”
}
}
}
}
// 设置相应的字段

POST /index/_doc/1_update
{
“doc”:{
“name” : “czx”
}
}
// 修改相应的字段

GET /index/_doc/1
// 获取该索引

GET /cat_health
// 获取健康值

DELETE /index/_doc/1
DELETE /index/
// 删除

  • 高级
    1.基础查询

2.高级查询

整合spring-boot 常用API

引入依赖,版本要跟elasticsearch要一致

  <properties>
        <elasticsearch.version>7.9.2</elasticsearch.version>
  </properties>

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

撰写配置类,本次采用的是RestHighLevelClient

@Configuration
public class ElasticSearchConfiguration {

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

新建user、索引api、文档api

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {
    private String name;
    private Integer ago;
}

package com.xc.springboot_es_jpa;

import com.alibaba.fastjson.JSON;
import com.xc.springboot_es_jpa.entity.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;

@SpringBootTest
class SpringbootEsJpaApplicationTests {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    // 索引
    // xxxindexRquest Create Get Delete
    // RestHighLevelClient.indices(). exist get delete
    @Test
    void createIndex() throws IOException {
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("student");
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);

    }

    // 获得索引
    // GetIndexRequst
    // indeices().exists()
    @Test
    void getIndex() throws IOException{
        GetIndexRequest getIndexRequest = new GetIndexRequest("spring-boot");
        Boolean judege = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println(judege);
    }

    // 删除索引
    // DeleteIndexRequest
    @Test
    void DeleteIndex() throws IOException{
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("spring-boot");
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

    // 文档
    // IndexRequst source id timeout
    //
    // restHighLevelClient.index
    @Test
    void creteDoc() throws IOException{
        IndexRequest student = new IndexRequest("student");
        User user = new User("czx",23);
        student.id("1");
        student.source(JSON.toJSONString(user),XContentType.JSON);
        student.timeout("1s");

        restHighLevelClient.index(student,RequestOptions.DEFAULT);
    }

    // 获取文档
    // GetRequest

    @Test
    void getDoc() throws  IOException{
        GetRequest getRequest = new GetRequest("student");
        getRequest.id("1");
        // 不获取返回的_source的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");

        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(documentFields.toString());
        System.out.println(documentFields.getSource().toString());
        System.out.println(documentFields.getSourceAsString());
    }



    // 更新
    // UpdateRequest
    // UpdateRequest.doc
    @Test
    void updateDoc() throws IOException{
        UpdateRequest updateRequest = new UpdateRequest("student", "1");
        User user = new User("czx",24);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        
    }

    // 删除
    // DeleteRequest
    // delete
    @Test
    void deleteDoc() throws  IOException{
        DeleteRequest deleteRequest = new DeleteRequest("student");
        deleteRequest.id("1");
        restHighLevelClient.delete(deleteRequest,RequestOptions.DEFAULT);
    }

    @Test
    //批量添加
    void bulkDoc() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("czx1",21));
        users.add(new User("czx2",21));
        users.add(new User("czx3",21));
        users.add(new User("czx4",21));
        users.add(new User("czx5",21));


        for(int i = 0 ; i < users.size() ; i++){
            bulkRequest.add(new IndexRequest("student")
            .id(""+i)
            .source(JSON.toJSONString(users.get(i)),XContentType.JSON));
        }

        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.status());
    }

    // 高级查询
    // SearchRequest 查询
    // SearchSourceBuilder 结果
    // QueryBuilders 条件
    @Test
    void searchDoc() throws IOException {
        SearchRequest searchRequest = new SearchRequest("student");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // QueryBuilders.termQuery();
        // QueryBuilders.matchAllQuery();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","czx1");
        searchSourceBuilder.query(termQueryBuilder);
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        System.out.println(JSON.toJSONString(hits.getHits()));
        System.out.println("======================");
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值