基础概念
文档: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]]