当前位置: 首页 > article >正文

ElasticSearch基础概念

基础概念

elasticsearch 是面向 文档存储 的,可以是数据库中的一条商品数据,一个订单信息。
文档数据会被序列化为 json 格式后存储在 elasticsearch 中。

索引

类似Mysql中的表

同类型文档的集合

文档

类似于Mysql中的行数据

一条数据就是一个文档,es中是Json格式

字段

类似于数据库中的列数据

Json文档中的字段

映射

类似于Mysql中的Schema,表结构

索引中文档的约束,比如字段名称,类型

正向索引

Mysql 采用正向索引:基于文档 id 创建索引。查询词条时必须先找到文档,而后判断是否包含搜索的内容

倒排索引

elasticsearch 采用倒排索引:
文档(document):每条数据就是一个文档
词条(term):文档按照语义分成的词语

ES索引库基本操作

创建索引库

mapping 属性

mapping 是对索引库中文档的约束,常见的 mapping 属性包括:
type:字段数据类型,常见的简单类型有:
字符串:text(可分词的文本),keyword(精确值,例如:品牌,国家,邮箱)
数值:long、integer、short、byte、double、float、
布尔:boolean
日期:date
对象:object index:是否创建索引参与搜索,默认为 true,如果不需要参与搜索设置为 false
analyzer:使用哪种分词器

创建索引库和 mapping 的语法如下:

PUT /news
{
  "mappings": {
    "properties": {
      "id":{
        "type": "keyword",
        "index": false
      },
      "title":{
        "type": "text",
        "analyzer": "ik_max_word"
      },
      "img":{
        "type": "keyword",
        "index": false
      },
      "operTime":{
        "type": "date",
        "index": false
      }
    }
  }
}

查询索引库

语法: GET /索引库名
实例: GET /news

删除索引库

语法: DELETE /索引库名
实例: DELETE /news

修改索引库

索引库和mapping一旦创建无法修改,但是可以添加新的字段

PUT /news/_mapping
{
  "properties":{
    "count":{
      "type":"long"
    }
  }
}

ES文档操作

新增文档

POST /索引库名/_doc/文档 id
{ “字段名 1”:”值 1”
“字段名 2”:”值 2”
..... }

例如:

POST /news/_doc/1
{
  "id":1,
  "title":"三体人向地球开战",
  "img":"11111111111111111111.jpg",
  "dzcount":8888888
}

POST /news/_doc/2
{
  "id":2,
  "title":"智子被地球人捕获,用来犁地",
  "img":"11111111111111111111.jpg",
  "dzcount":88888889
}

POST /news/_doc/3
{
  "id":3,
  "title":"歌者文明向三体星系投放二向箔",
  "img":"11111111111111111111.jpg",
  "dzcount":66666666666
}

POST /news/_doc/4
{
  "id":4,
  "title":"地球通过宇宙广播毁灭了三体星系",
  "img":"11111111111111111111.jpg",
  "dzcount":66666666666
}

POST /news/_doc/5
{
  "id":5,
  "title":"歌者文明投放的二向箔导致地球毁灭",
  "img":"11111111111111111111.jpg",
  "dzcount":66666666666
}

向news中添加5条如上的文档

此时可以在ES head项目中查看添加好的数据

查询文档

语法:
GET /索引库名/_doc/文档 id

删除文档

语法:
DELETE /索引库名/_doc/文档 id

修改文档

POST /索引库名/_update/文档 id
{
"doc":{
"要修改的字段":"新值"
}
}
例如:
POST /news/_update/1
{
  "doc":{
    "title":"三体人向地球开战,向地球投放智子"
  }
}

搜索文档

GET /news/_search
{
"query":{
"match":{
"title":" 美国 "
              }
      }
}
例如:
GET /news/_search
{
  "query": {
    "match": {
      "title": "地球毁灭"
    }
  }
}

通过分词器我们可以查询到搜索内容分词后的全部搜索内容

        

将地球毁灭分词为地球和毁灭,分别搜索到了3条和分词相关的内容

 SpringBoot集成ES

官网地址: https://www.elastic.co/guide/en/elasticsearch/client/index.html
指定版本,版本必须与安装的 ES 版本一致
< properties >
< java.version >1.8</ java.version >
< elasticsearch.version >7.6.1</ elasticsearch.version >
</ properties >
添加依赖
< dependency >
< groupId >org.elasticsearch.client</ groupId >
< artifactId >elasticsearch-rest-high-level-client</ artifactId >
</ dependency >
添加初始化 RestHighLevelClient 的配置类

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchConfig {

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

}
索引库操作
创建索引库
CreateIndexRequest request = new CreateIndexRequest("users");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request,
RequestOptions.DEFAULT);

判断索引库是否存在
 
GetIndexRequest request = new GetIndexRequest("users");
boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);

删除索引库
DeleteIndexRequest indexRequest = new DeleteIndexRequest("users");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(indexRequest,
RequestOptions.DEFAULT);
delete.isAcknowledged();//返回 true 删除成功,返回 false 删除失败

文档操作
添加文档
//将新闻添加到 mysql 的同时,将数据同步更新到 ES,为搜索提供数据
News news = new News();
news.setId(3);
news.setTitle("美国今年要总统选择,拜登着急了");
news.setImg("aaaaasssss.jpg");
IndexRequest indexRequest = new IndexRequest("news").id(news.getId().toString());
//将对象转为 json 存进 ES
indexRequest.source(new ObjectMapper().writeValueAsString(news),XContentType.JSON);
restHighLevelClient.index(indexRequest,RequestOptions.DEFAULT);修改文档
News news = new News();
news.setId(3);
news.setTitle("中国航母开往美国,准备开战,拜登着急了");
news.setImg("dddddddddddd.jpg");
UpdateRequest updateRequest = new UpdateRequest("news",news.getId().toString());
updateRequest.doc(new ObjectMapper().writeValueAsString(news), XContentType.JSON);
restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);

查询文档
GetRequest getRequest = new GetRequest("news","1");
GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
//获取查询的内容,返回 json 格式
String json = getResponse.getSourceAsString();
//使用 jackson 组件将 json 字符串解析为对象
News news = new ObjectMapper().readValue(json, News.class);

删除文档
DeleteRequest deleteRequest = new DeleteRequest("news","1");
DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);

搜索文档
SearchRequest searchRequest = new SearchRequest("news");
SearchRequest searchRequest = new SearchRequest("news");
//精确条件查询
searchRequest.source().query(QueryBuilders.termQuery("title","美国"));
//发送查询请求
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//接收查询结果
SearchHits hits = search.getHits();
//组装查询结果
ArrayList<News> list = new ArrayList<>();
//取出结果集
for (SearchHit searchHit : hits.getHits()){
String json = searchHit.getSourceAsString();
News news = new ObjectMapper().readValue(json,News.class);
list.add(news);
}


http://www.kler.cn/news/366853.html

相关文章:

  • 什么是命名实体识别?
  • 聚类分析算法——DBSCAN(密度聚类)算法详解
  • 软考(中级-软件设计师)算法分析篇(1024)
  • 1024是什么日子
  • Appium中的api(二)
  • 【案例演示】图像描述大模型示例及概念解释
  • 腾讯云上基于 Apache Pulsar 的大规模生产实践
  • C++【string类的使用】(下)
  • python爬虫数据存进mysql数据库
  • Mybatis-03.入门-配置SQL提示
  • qt 滚动条 美化
  • 基于SSM框架、传统文化学习系统的设计与实现
  • 什么是注意力机制?
  • 什么是 VolTE 中的 Slient Redial?它和 CSFB 什么关系?
  • git 如何获取当前分支的最新提交哈希值(Commit ID)
  • 005:PTGui全景拼接工具安装教程
  • 从零开始学PHP之函数
  • 多线程——线程的状态
  • vue-弹窗
  • Spring Boot论坛网站:微服务架构的实践
  • 使用 Spring Boot 实现图片上传
  • Python小白学习教程从入门到入坑------第十六课 函数进阶 [作用域、匿名函数](语法基础)
  • C++:继承(上篇)
  • Macos m系列芯片环境下安装python3以及mysqlclient流程以及遇到的一系列问题
  • Redis-05 Redis发布订阅
  • 2024年全球 MoonBit 编程创新赛-零基础早鸟教程-使用wasm4八小时开发井子棋小游戏