Elasticsearch基础

35 阅读2分钟

基础概念

文档:mysql中一条数据就是一个文档 词条:对文档内容分词,得到的词语为词条,例如小米手机 => 小米,手机 倒排索引:对文档内容进行分词,记录词条所在的文档位置(例:词条:手机 位置:id为1)根据词条查找文档 索引(index):相同类型的文档集合 映射(mapping):索引中文档字段的约束信息 ![[Pasted image 20250213193459.png]]

![[Pasted image 20250214091017.png]]

ES的CRUD

修改索引库

es不支持修改索引库,只支持添加新字段

PUT /索引库名/_mapping
{
	"properties": {
	  "字段名称": { // 新字段名
	    "type": "integer"
	  }
	} 
}

添加文档 POST请求

POST /索引库名/_doc/文档id
{
  "字段1": ${val},
  "字段2": ${val}
}

删除文档

DELETE /索引库名/_doc/文档id

查看文档

GET /索引库名/_doc/文档id

修改文档

全量修改,如果id存在则删除新增,如果不存在则直接新增

PUT /索引库名/_doc/文档id {"字段1" : ${val}, "字段2" : ${val}}

增量修改,修改指定字段值

POST /索引库名/_doc/文档id
{
  "doc": {
    "字段名" : "新值"
  }
}

RestClient的CRUD

创建文档

public void addDoc(String id) {
	IndexRequest indexRequest = new IndexRequest("${index_name}").id(id);
	indexRequest.resource(doc_data, JSON);
	client.index(request, DEFAULT);
}

删除文档

public void delDoc(Stirng id) {
	DeleteRequest delRequest = new DeleteRequest(${index_name}, id);
	client.delete(delRequest, DEFAULT);
}

获取文档

public String getDoc(String id) {
	GetRequest getRequest = new GetRequest(${index_name}, id);
	String resp = client.get(getRequest, DEFAULT);
	String source = resp.getSourceAsString();
	return source; // 获取的是json格式数据
}

修改文档

全量更新

和新增文档为同一个API

局部更新

![[Pasted image 20250214150339.png]] 修改参数中为4个参数,每两个参数为一对key和value

批量处理

![[Pasted image 20250214150822.png|1050]]

叶子查询

全文检索

![[Pasted image 20250214153721.png]]

复合查询

must : 与 should : 或 must_not : 必须不匹配 filter : 必须匹配,不参与计算分数 ![[Pasted image 20250214161311.png|850]] 每个关键字中加入叶子查询

聚合

  • Bucket桶集合:对文档分类
    • termAggregation:文档字段分组
    • 按照日期接替分组,例如一周为一组

聚合解析

![[Pasted image 20250216091057.png]]

数据同步