当前位置: 代码网 > it编程>编程语言>Java > 关于ElasticSearch的常用增删改查DSL和代码

关于ElasticSearch的常用增删改查DSL和代码

2024年05月15日 Java 我要评论
es增删改查常用语法我们日常开发中,操作数据库写sql倒是不可能忘记,但是操作es的dsl语句有时候很容易忘记,特地记录一下方便查找。注意,如果有些字段设置的text类型,那么在查询的时候加上.key

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));
}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com