ElaticSearch7.8.0总结

ElasticSearch是什么

ElasticSearch是一个开源的全文搜索引擎,建立在全文搜索库Apache Lucen基础之上,近实时的搜索和分析,能处理PB级别的数据,通过简单的RESTful API来影藏Lucene的复杂性。

核心概念

  • Index索引:一个索引是一个文档的集合,每个索引有唯一的名字,通过这个名字来操作它。
  • Document文档: 被引用的的一条数据,索引的基本信息单元,以JSON格式来表示
  • field字段:组成文档中的一个单元如 “title”
  • Cluster集群:一个集群有一个唯一的名字标识,具有相同的集群名的节点才会组成一个集群。
  • Node节点
  • Shard 分片:创建一个索引时可以指定分成多少片来存储,每个分片本身也是一个功能完善且独立的索引,分片的好处是允许我们水平切分/扩张容量,多个分片进行分布式的,并行操作,提高系统的性能和吞吐量。

倒排索引基本概念

正排索引:文档 -----> 单词
倒排索引:单词 ----->文档
正排索引:从文档角度看其中的单词,表示每个文档都包含那些单词,一个每个单词出现的位置
倒排索引:从单词角度看文档,表示每个的单词分别在那些文档中出现。以及在各自的文档中每个单词分别出现多少次。

CRUD:

1.通过RESTful API进行操作

  • 创建索引
    ES 服务器发 PUT 请求http://127.0.0.1:9200/shopping

  • 查看所有索引
    向ES 服务器发 GET 请求 :http://127.0.0.1:9200/_cat/indices?v

  • 查看的那个索引
    ES 服务器发 GET 请求 :http://127.0.0.1:9200/shopping

  • 删除索引
    ES 服务器发 DELETE 请求 : http://127.0.0.1:9200/shopping

  • 创建文档
    ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/_doc
    请求体内容为:
    {
    “title”:“小米手机”,
    “category”:“小米”,
    “images”:“http://www.gulixueyuan.com/xm.jpg”,
    “price”:3999.00
    }
    自定义唯一性标识,需要在创建时指定: http://127.0.0.1:9200/shopping/_doc/1

  • 查看文档
    ES 服务器发 GET 请求 : http://127.0.0.1:9200/shopping/_doc/1

  • 修改文档
    ES 服务器发 POST 请求 : http://127.0.0.1:9200/shopping/_doc/1
    请求体内容为:

 {
"title":"华为手机",
"category":"华为",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":4999.00
}
  • 修改字段
    http://127.0.0.1:9200/shopping/_update/1
{
"doc": {
"price":3000.00
}
}
  • 删除文档
    ES 服务器发 DELETE 请求 : http://127.0.0.1:9200/shopping/_doc/1
  • 创建映射
    ES 服务器发 PUT 请求 : http://127.0.0.1:9200/student/_mapping
{
"properties": {
"name":{
"type": "text",
"index": true
},
"sex":{
"type": "text",
"index": false
},
"age":{
"type": "long",
"index": false
}
}
}
  • 查询所有文档
    ES 服务器发 GET 请求 : http://127.0.0.1:9200/student/_search
{
"query": {
"match_all": {}
}
}

通过API操作CRUD

创建索引对象

RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
//创建索引
CreateIndexRequest request = new CreateIndexRequest("user");
// 发送请求,获取响应
CreateIndexResponse response = client.indices().create(request,
RequestOptions.DEFAULT);
boolean acknowledged = response.isAcknowledged();
// 响应状态
System.out.println("操作状态 = " + acknowledged);
@Test
//    测试文档
    void TestAddDocument() throws IOException {
        //创建对象
        User user = new User("狂神说", 3);
        //创建请求
        IndexRequest request = new IndexRequest("kuang_index");
//        规则
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(1));
        request.timeout("1s");
//        将我们的数据请求放入json
        request.source(JSON.toJSONString(user),XContentType.JSON);
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status());

    }
//    获取文档
    @Test
    void testIsExists() throws IOException {
        GetRequest getRequest = new GetRequest("kuang_index", "1");
//        不获取返回的_source的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
//    获取文档信息
    @Test
    public void testGetDocument() throws IOException{
        GetRequest getRequest = new GetRequest("kuang_index", "1");
        GetResponse getReponse = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(getReponse.getSourceAsString());
        System.out.println(getReponse);
    }
//    更新文档
    @Test
    public void testUpdate() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("kuang_index", "1");
        updateRequest.timeout("1s");
        User user = new User("狂神说", 18);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.status());
    }
//    删除文档记录
    @Test
    public void testDeleteRequest() throws IOException {
        DeleteRequest request = new DeleteRequest("kuang_index", "1");
        request.timeout("1s");
        DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());
    }
    @Test
    public void testBulkRequest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        ArrayList<User> userList = new ArrayList();
        userList.add(new User("kuangshen1",1));
        userList.add(new User("kuangshen2",2));
        userList.add(new User("kuangshen3",3));
        userList.add(new User("kuangshen4",4));
        userList.add(new User("kuangshen5",5));
        userList.add(new User("kuangshen6",6));
        userList.add(new User("kuangshen7",7));
        for(int i = 0; i < userList.size(); i++){
            bulkRequest.add(
                    new IndexRequest("kuang_index").id(""+(i+1)).source(JSON.toJSONString(userList.get(i)),XContentType.JSON
                    )
            );
            BulkResponse bulkResponse = client.bulk(bulkRequest,RequestOptions.DEFAULT);
            System.out.println(bulkResponse.hasFailures());
        }
    }
    @Test
//    查询
    /*
    SearchRequest 搜索请求
    SearchSourceBuilder
    HighlightBuilder
    MatchAllQueryBuilder
QueryBuilder
     */
    public void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest("kuang_index");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "kuangshen1");
//        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println("===========================");
    for (SearchHit  documentFields : searchResponse.getHits()) {
            System.out.println(documentFields.getSourceAsMap());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值