es增删改查常用语法
我们日常开发中,操作数据库写sql倒是不可能忘记,但是操作es的dsl语句有时候很容易忘记,特地记录一下方便查找。
注意,如果有些字段设置的text类型,那么在查询的时候加上.keyword,比如查询code字段
{
"query": {
"terms": {
"code.keyword": ["aaa","bbb"]
}
}
}
dsl语句
1、创建索引
-- 创建索引
put /my_index
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"description": {
"type": "text"
},
"timestamp": {
"type": "date"
}
}
}
}
2、插入文档
-- 插入文档
post /my_index/_doc/主键值
{
"title": "sample document",
"description": "this is a sample document for elasticsearch",
"timestamp": "2022-01-01"
}
3、更新文档
-- 更新一个文档
post /my_index/_update/1 // 主键
{
"doc": {
"字段1": "内容1",
"字段2": "内容2",
"字段3": "内容3"
// 添加需要更新的多个字段及对应的内容
}
}
-- 批量更新多个文档字段
post /my_index/_update_by_query
{
"query": {
"terms": {
"_id": [111, 222] // 指定id为111和222的文档
},
"script": {
"source": "ctx._source.aaa= 1; ctx._source.bbb= 2" // 更新aaa和bbb字段为1和2
}
}
-- 批量更新多个文档字,指定字段内容为另外一个字段的内容
post /search_order_index/_update_by_query
{
"query": {
"terms": {
"orderno": [
"1111", // 指定更新订单编号为111和222的记录
"222"
]
}
},
"script": {
"source": "
ctx._source.字段1= 1; // 指定字段1 为1
ctx._source.字段2= 1; // 指定字段2 为1
ctx._source.字段3= 0; // 指定字段3为0
ctx._source.字段4= ctx._source.字段5" // 指定字段4为字段5的内容
}
}
-- 更新所有文档字段
post /my_index/_update_by_query
{
"query": {
"match_all": {} // 匹配所有文档
},
"script": {
"source": "ctx._source.aaa = 1; ctx._source.bbb = 1" // 批量更新aaa和bbb字段为1
}
}
4、删除文档(单独、多个、全部)
-- 删除单条文档
delete /my_index/_doc/主键值
或者
-- 删除单条文档
post 索引名/_delete_by_query
{
"query":{
"term":{
"_id":4043
}
}
}
-- 删除多条文档
post 索引名/_delete_by_query
{
"query": {
"terms": {
"_id": [4043, 4044, 4045] // 添加多个id值
}
}
}
-- 删除索引中的所有数据
post my_index/_delete_by_query
{
"query": {
"match_all": {
}
}
}
5、删除索引
-- 删除索引 delete /my_index
6、设置索引别名
-- 设置索引别名
post /_aliases
{
"actions": [
{"add": {"index": "my_index2", "alias": "my_index"}}
]
}
7、设置切片和副本数量
-- 设置切片和副本数量
put your_index
{
"mappings" : {
"properties" : {
#索引字段(略)
}
}
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
8、查询
-- 查询单个字段内容
post /my_index/_search
{
"query": {
"bool": {
"must": {
"term": {
"messageid": "cs202303160008-2"
}
}
}
}
}
-- 查询单个字段的多个内容 类似mysql中的in 用terms 多了个s
post /my_index/_search
{
"query": {
"bool": {
"must": {
"terms": {
"messageid": ["22222","1111"]
}
}
}
}
}
-- 分页排序查询 不带其他条件
post /my_index/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 20,
"sort": [
{
"createdat": {
"order": "desc"
}
}
]
}
-- 分页排序查询 带其他条件
{
"query": {
"bool": {
"must": [
{
"prefix": {
"action": "aa开头"
}
},
{
"wildcard": {
"param": "*左右匹配内容*"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 10,
"sort": [
{
"createdat": {
"order": "desc"
}
}
]
}
9、统计
post /my_index/_count
{
"query": {
"bool": {
"must": {
"term": {
"messageid": "cs202303160008-2"
}
}
}
}
}
代码
pom依赖
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://maven.apache.org/pom/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelversion>4.0.0</modelversion>
<groupid>com.demo.sdk</groupid>
<artifactid>elasticsearch-util</artifactid>
<version>1.0.0-snapshot</version>
<packaging>jar</packaging>
<name>elasticsearch-util</name>
<description>spring boot support for elasticsearch-util</description>
<properties>
<java.version>11</java.version>
<elasticsearch.version>7.10.0</elasticsearch.version>
<spring-boot.version>2.7.0</spring-boot.version>
<hutool.version>5.8.15</hutool.version>
<pagehelper.version>1.4.2</pagehelper.version>
</properties>
<dependencies>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-autoconfigure</artifactid>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-configuration-processor</artifactid>
<version>${spring-boot.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-logging</artifactid>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupid>org.elasticsearch.client</groupid>
<artifactid>elasticsearch-rest-high-level-client</artifactid>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupid>com.github.pagehelper</groupid>
<artifactid>pagehelper-spring-boot-starter</artifactid>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupid>cn.hutool</groupid>
<artifactid>hutool-all</artifactid>
<version>${hutool.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-compiler-plugin</artifactid>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-source-plugin</artifactid>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
1、es配置类
import cn.hutool.core.text.charsequenceutil;
import org.apache.http.auth.authscope;
import org.apache.http.auth.usernamepasswordcredentials;
import org.apache.http.client.credentialsprovider;
import org.apache.http.impl.client.basiccredentialsprovider;
import org.springframework.boot.context.properties.configurationproperties;
/**
* es配置类
* @author ppp
* @date 2023/3/21
*/
@configurationproperties(prefix = "elasticsearch.config")
public class elasticsearchproperties {
/**
* 域名
*/
private string host;
/**
* 端口
*/
private string port;
/**
* 用户名
*/
private string username;
/**
* 密码
*/
private string password;
/**
* 连接超时时间
*/
private int connecttimeout;
/**
* 连接超时时间
*/
private int sockettimeout;
/**
* 获取连接的超时时间
*/
private int connectionrequesttimeout;
/**
* 获取搜索的超时时间
*/
private long searchrequesttimeout = 10000l;
/**
* 最大连接数
*/
private int maxconnectnum;
/**
* 最大路由连接数
*/
private int maxconnectperroute;
public string gethost() {
return host;
}
public void sethost(string host) {
this.host = host;
}
public string getport() {
return port;
}
public void setport(string port) {
this.port = port;
}
public int getconnecttimeout() {
return connecttimeout;
}
public void setconnecttimeout(int connecttimeout) {
this.connecttimeout = connecttimeout;
}
public int getsockettimeout() {
return sockettimeout;
}
public void setsockettimeout(int sockettimeout) {
this.sockettimeout = sockettimeout;
}
public int getconnectionrequesttimeout() {
return connectionrequesttimeout;
}
public void setconnectionrequesttimeout(int connectionrequesttimeout) {
this.connectionrequesttimeout = connectionrequesttimeout;
}
public long getsearchrequesttimeout() {
return searchrequesttimeout;
}
public void setsearchrequesttimeout(long searchrequesttimeout) {
this.searchrequesttimeout = searchrequesttimeout;
}
public int getmaxconnectnum() {
return maxconnectnum;
}
public void setmaxconnectnum(int maxconnectnum) {
this.maxconnectnum = maxconnectnum;
}
public int getmaxconnectperroute() {
return maxconnectperroute;
}
public void setmaxconnectperroute(int maxconnectperroute) {
this.maxconnectperroute = maxconnectperroute;
}
public string getusername() {
return username;
}
public void setusername(string username) {
this.username = username;
}
public string getpassword() {
return password;
}
public void setpassword(string password) {
this.password = password;
}
public credentialsprovider getcredentialsprovider() {
if (charsequenceutil.isnotblank(username) && charsequenceutil.isnotblank(password)) {
credentialsprovider credentialsprovider = new basiccredentialsprovider();
credentialsprovider.setcredentials(authscope.any, new usernamepasswordcredentials(username, password));
return credentialsprovider;
}
return null;
}
}
2、es工具自动配置类
import cn.hutool.core.text.charsequenceutil;
import com.demo.sdk.elasticsearch.template.elasticsearchutiltemplate;
import org.apache.http.httphost;
import org.elasticsearch.client.restclient;
import org.elasticsearch.client.restclientbuilder;
import org.elasticsearch.client.resthighlevelclient;
import org.springframework.boot.autoconfigure.condition.conditionalonclass;
import org.springframework.boot.autoconfigure.condition.conditionalonmissingbean;
import org.springframework.boot.context.properties.enableconfigurationproperties;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
/**
* es工具自动配置类
* @author ppp
* @date 2023/3/21
*/
@configuration
@conditionalonclass(elasticsearchutiltemplate.class)
@enableconfigurationproperties(elasticsearchproperties.class)
public class elasticsearchutilautoconfiguration {
@bean
@conditionalonmissingbean
public resthighlevelclient esrestclient(elasticsearchproperties esearchproperties) {
if (esearchproperties == null) {
throw new nullpointerexception("es configuration properties is null");
}
string host = esearchproperties.gethost();
string port = esearchproperties.getport();
restclientbuilder builder;
if (charsequenceutil.isnotblank(host) && charsequenceutil.isblank(port)) {
builder = restclient.builder(httphost.create(host));
}else {
builder = restclient.builder(new httphost(host, integer.parseint(port)));
}
// 异步httpclient连接延时配置
builder.setrequestconfigcallback(requestconfigbuilder -> {
requestconfigbuilder.setconnecttimeout(esearchproperties.getconnecttimeout());
requestconfigbuilder.setsockettimeout(esearchproperties.getsockettimeout());
requestconfigbuilder.setconnectionrequesttimeout(esearchproperties.getconnectionrequesttimeout());
return requestconfigbuilder;
});
// 异步httpclient连接数配置
builder.sethttpclientconfigcallback(httpclientbuilder -> {
httpclientbuilder.setmaxconntotal(esearchproperties.getmaxconnectnum());
httpclientbuilder.setmaxconnperroute(esearchproperties.getmaxconnectperroute());
httpclientbuilder.setdefaultcredentialsprovider(esearchproperties.getcredentialsprovider());
return httpclientbuilder;
});
return new resthighlevelclient(builder);
}
@bean
@conditionalonmissingbean
public elasticsearchutiltemplate elasticsearchutiltemplate(resthighlevelclient esrestclient, elasticsearchproperties elasticsearchproperties) {
if (esrestclient == null) {
throw new nullpointerexception("resthighlevelclient init error");
}
return new elasticsearchutiltemplate(esrestclient,elasticsearchproperties.getsearchrequesttimeout());
}
}
3、自动装配配置
装配要生效需要elasticsearchutilautoconfiguration加入springboot的自动装配文件spring.factories
这是spring配置的特定目录文件,自己新建一个,名字和目录要一致

# auto configure org.springframework.boot.autoconfigure.enableautoconfiguration=\ com.demo.sdk.elasticsearch.config.elasticsearchutilautoconfiguration
4、定义一个模板工具类
import cn.hutool.json.jsonutil;
import com.github.pagehelper.page;
import com.github.pagehelper.page.pagemethod;
import com.demo.sdk.elasticsearch.exception.elasticsearcherrorexception;
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.delete.deleteresponse;
import org.elasticsearch.action.get.getrequest;
import org.elasticsearch.action.get.getresponse;
import org.elasticsearch.action.index.indexrequest;
import org.elasticsearch.action.index.indexresponse;
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.core.countrequest;
import org.elasticsearch.client.core.countresponse;
import org.elasticsearch.client.indices.createindexrequest;
import org.elasticsearch.client.indices.createindexresponse;
import org.elasticsearch.common.unit.timevalue;
import org.elasticsearch.common.xcontent.xcontenttype;
import org.elasticsearch.search.searchhit;
import org.elasticsearch.search.builder.searchsourcebuilder;
import java.util.arraylist;
import java.util.list;
import java.util.map;
/**
* es搜索引擎模板
* @author ppp
* @date 2023/3/21
*/
public class elasticsearchutiltemplate {
private final resthighlevelclient esrestclient;
private final long searchrequesttimeout;
public elasticsearchutiltemplate(resthighlevelclient esrestclient, long searchrequesttimeout) {
this.searchrequesttimeout = searchrequesttimeout;
this.esrestclient = esrestclient;
}
/**
* 列表查询
*
* @param searchsourcebuilder searchsourcebuilder
* @param clazz 返回结果class对象
* @param indices es索引
* @return java.util.list 对象列表
*/
public <t> list<t> listsearch(searchsourcebuilder searchsourcebuilder, class<t> clazz, string... indices) {
page<t> resultpage = pagemethod.getlocalpage();
boolean isresultpage = resultpage != null;
if (isresultpage) {
pagemethod.clearpage();
searchsourcebuilder.from((int) resultpage.getstartrow());
searchsourcebuilder.size(resultpage.getpagesize());
}
if (isresultpage && resultpage.iscount()) {
resultpage.settotal(count(searchsourcebuilder, indices));
}
searchresponse searchresponse = search(searchsourcebuilder, indices);
list<t> resultlist = formatsearchresult(searchresponse, clazz);
if (isresultpage && resultpage.iscount()) {
resultpage.addall(resultlist);
return resultpage;
}
return resultlist;
}
public searchresponse search(searchsourcebuilder searchsourcebuilder, string... indices) {
searchrequest searchrequest = new searchrequest(indices);
searchsourcebuilder.timeout(timevalue.timevaluemillis(searchrequesttimeout));
searchrequest.source(searchsourcebuilder);
return search(searchrequest);
}
public searchresponse search(searchrequest searchrequest) {
try {
return esrestclient.search(searchrequest, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 统计数量
*
* @param searchsourcebuilder searchsourcebuilder
* @param indices es索引
* @return countresponse
*/
public long count(searchsourcebuilder searchsourcebuilder, string... indices) {
countrequest countrequest = new countrequest(indices);
searchsourcebuilder.timeout(timevalue.timevaluemillis(searchrequesttimeout));
countrequest.query(searchsourcebuilder.query());
return count(countrequest, requestoptions.default).getcount();
}
public countresponse count(countrequest countrequest, requestoptions options) {
try {
return esrestclient.count(countrequest, options);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 创建索引
*
* @param createindexrequest createindexrequest
* @return createindexresponse
*/
public createindexresponse createindices(createindexrequest createindexrequest) {
try {
return esrestclient.indices().create(createindexrequest, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 删除索引(谨慎操作,索引下所有数据都将清空)
*
* @param index 索引名称
* @return acknowledgedresponse
*/
public acknowledgedresponse deleteindex(string index) {
deleteindexrequest deleteindexrequest = new deleteindexrequest();
deleteindexrequest.indices(index);
return deleteindices(deleteindexrequest);
}
/**
* 删除索引(谨慎操作,索引下所有数据都将清空)
*
* @param deleteindexrequest deleteindexrequest
* @return acknowledgedresponse
*/
public acknowledgedresponse deleteindices(deleteindexrequest deleteindexrequest) {
try {
return esrestclient.indices().delete(deleteindexrequest, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 插入数据
*
* @param index 索引
* @param id 唯一id
* @param source 插入对象
* @return indexresponse
*/
public indexresponse add(string index, object id, object source) {
indexrequest indexrequest = new indexrequest(index).id(string.valueof(id));
indexrequest.source(jsonutil.tojsonstr(source), xcontenttype.json);
try {
return esrestclient.index(indexrequest, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 批量插入数据
* 建议:数量控制在5000以内
*
* @param index 索引
* @param sourcemap 数据<唯一id,对象>
* @return bulkresponse
*/
public bulkresponse addbulk(string index, map<string, object> sourcemap) {
bulkrequest request = new bulkrequest();
sourcemap.foreach((id, source) -> {
request.add(new indexrequest(index).id(id).source(jsonutil.tojsonstr(source), xcontenttype.json));
});
try {
return esrestclient.bulk(request, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 获取数据
*
* @param getrequest getrequest
* @return getresponse
*/
public getresponse get(getrequest getrequest) {
try {
return esrestclient.get(getrequest, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 更新数据
*
* @param updaterequest updaterequest
* @return updateresponse
*/
public updateresponse update(updaterequest updaterequest) {
try {
return esrestclient.update(updaterequest, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 删除数据
*
* @param deleterequest deleterequest
* @return deleteresponse
*/
public deleteresponse delete(deleterequest deleterequest) {
try {
return esrestclient.delete(deleterequest, requestoptions.default);
} catch (exception e) {
throw new elasticsearcherrorexception(e.getmessage(), e.getcause());
}
}
/**
* 格式化搜索结果
*
* @param searchresponse 搜索结果
* @param clazz 返回对象
* @return java.util.list
*/
public <t> list<t> formatsearchresult(searchresponse searchresponse, class<t> clazz) {
searchhit[] searchhits = searchresponse.gethits().gethits();
list<t> resultlist = new arraylist<t>();
for (searchhit searchhit : searchhits) {
resultlist.add(jsonutil.tobean(searchhit.getsourceasstring(), clazz));
}
return resultlist;
}
}
5、定义一个异常
/**
* 错误异常
* @author ppp
* @date 2023/3/21
*/
public class elasticsearcherrorexception extends runtimeexception {
public elasticsearcherrorexception(string message) {
super(message);
}
public elasticsearcherrorexception(string message, throwable cause) {
super(message, cause);
}
}
6、application.yml配置
# elasticsearch
elasticsearch.config:
host: 127.0.0.1
port: 9200
username: admin
password: admin123
connect-time-out: 1000
socket-time-out: 30000
connection-request-time-out: 500
search-request-time-out: 5000
max-connect-num: 100
max-connect-per-route: 100
7、测试
class demoapplicationtests {
/**
* 获取elasticsearchutiltemplate模板
*/
@autowired
private elasticsearchutiltemplate elasticsearchtemplate;
/**
* 分页查询
*/
@test
void getlistpage() {
// 分页
pagehelper.startpage(1, 10);
searchsourcebuilder searchsourcebuilder = new searchsourcebuilder();
boolquerybuilder boolquerybuilder = querybuilders.boolquery();
// 筛选 filter比must要好一点,filter会对条件进行缓存,这有助于提高查询性能,特别是对于频繁使用的过滤条件
boolquerybuilder.filter(querybuilders.termquery("ip", "192.168.0.1"));
// 筛选多个值 类似mysql的in效果 termsquery和termquery区别
boolquerybuilder.filter(querybuilders.termsquery("name", arrays.aslist("张三","李四"));
// 模糊
boolquerybuilder.must(querybuilders.wildcardquery("ext1", "*测试*"));
searchsourcebuilder.query(boolquerybuilder);
// 排序
searchsourcebuilder.sort("createtime", sortorder.desc);
list<studylogindex> logindexlist = this.elasticsearchtemplate.listsearch(searchsourcebuilder, studylogindex.class, index);
pageinfo<studylogindex> studylogindexpageinfo = new pageinfo<>(logindexlist);
system.out.println(jsonutil.tojsonstr(studylogindexpageinfo));
}
/**
* 统计
*/
@test
void counttest() {
// 分页
pagehelper.startpage(1, 10);
searchsourcebuilder searchsourcebuilder = new searchsourcebuilder();
boolquerybuilder boolquerybuilder = querybuilders.boolquery();
// 筛选
boolquerybuilder.filter(querybuilders.termquery("ip", "127.0.0.1"));
// 模糊
boolquerybuilder.must(querybuilders.wildcardquery("ext2", "*用*"));
searchsourcebuilder.query(boolquerybuilder);
countresponse count = elasticsearchtemplate.count(searchsourcebuilder, index);
system.out.println("统计总数:"+ count.getcount());
}
/**
* 删除索引
*/
@test
void deleteindicestest() {
elasticsearchtemplate.deleteindex(index);
}
/**
* 创建es索引
*/
@test
void createindicestest() {
createindexrequest createindexrequest = new createindexrequest(index);
createindexrequest.mapping("{\n" +
" \"properties\": {\n" +
" \"globalid\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"site\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"tag\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"uid\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"classid\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"courseid\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"videoid\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"starttime\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"time\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"ip\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"start\": {\n" +
" \"type\": \"integer\"\n" +
" },\n" +
" \"end\": {\n" +
" \"type\": \"integer\"\n" +
" },\n" +
" \"createtime\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"ext1\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"ext2\": {\n" +
" \"type\": \"keyword\"\n" +
" }\n" +
" }\n" +
"}", xcontenttype.json);
elasticsearchtemplate.createindices(createindexrequest);
}
/**
* 插入es数据
*/
@test
void adddatatest() {
for (int i = 0; i < 10; i++) {
studylogindex studylogindex = new studylogindex();
studylogindex.setglobalid("cx"+i);
studylogindex.setsite("cx");
studylogindex.settag("success");
studylogindex.setuid(12000000l+i);
studylogindex.setclassid(123456l);
studylogindex.setcourseid(123456l);
studylogindex.setvideoid(123456l);
studylogindex.setstarttime(123456l);
studylogindex.settime(123456l);
studylogindex.setip("127.0.0.1");
studylogindex.setstart(0);
studylogindex.setend(0);
studylogindex.setcreatetime(0l);
studylogindex.setext1("测试es工具");
studylogindex.setext2("备用");
elasticsearchtemplate.add(index, studylogindex.getglobalid(), studylogindex);
}
}
/**
* 批量插入es
*/
@test
void bulkadddatatest() {
map<string, object> map = new hashmap<>(16);
for (int i = 100; i < 1000; i++) {
studylogindex studylogindex = new studylogindex();
studylogindex.setglobalid(idutil.getsnowflakenextidstr());
studylogindex.setsite("zj");
studylogindex.settag("success");
studylogindex.setuid(12000000l+i);
studylogindex.setclassid(123456l);
studylogindex.setcourseid(123456l);
studylogindex.setvideoid(123456l);
studylogindex.setstarttime(123456l);
studylogindex.settime(123456l);
studylogindex.setip("192.168.0.3");
studylogindex.setstart(0);
studylogindex.setend(0);
studylogindex.setcreatetime(0l);
studylogindex.setext1("批量测试es工具");
studylogindex.setext2("备用");
map.put(studylogindex.getglobalid(), studylogindex);
}
elasticsearchtemplate.addbulk(index, map);
}
/**
* 聚合检索
*/
@test
void aggregatetest() {
searchsourcebuilder searchsourcebuilder = new searchsourcebuilder();
// 聚合检索不设置大小会默认只返回10个统计结果
termsaggregationbuilder field = aggregationbuilders.terms("group_by_ip").field("ip").size(1000);
searchsourcebuilder.aggregation(field).size(10);
searchresponse search = elasticsearchtemplate.search(searchsourcebuilder, index);
system.out.println(jsonutil.tojsonstr(search));
map<string, long> countmap = aggregationsutil.getcountmap(search.getaggregations());
system.out.println(jsonutil.tojsonstr(countmap));
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论