最近由于需要向elasticsearch6.5版本中添加海量级模拟数据,由于我并没有接触过ealsticsearch,借机便学习了一下。
-springboot版本:ealsticsearch6.5版本我实测是需要springBoot2版本以上,lz用的是2.0.7版本。
-
maven依赖
<!--只需要改一下elasticsearch的version版本,并添加下面三个依赖 -->
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>6.5.0</elasticsearch.version>
</properties>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
-
application.yml
这个yml文件是自己创建的,跟application.properties文件的作用是一样的
server:
port: 8080
#ElasticsearchConfig里面需要读取相应配置
elasticsearch:
ip: 127.0.0.1
port: 9300
pool: 10
cluster-name: elasticsearch
如过说ealsticsearch是放在服务器的话,需要把ip地址改成服务器ip,端口需要问一下相关人员改没改,cluster-name通过访问ip:9200这个网页就可以看见了,这个配置的ealsticsearch会有黄线,不过没关系,我们添加这段配置的原因是我们一会需要用类来获取这个配置文件中的相应信息。
-
config配置文件
import java.net.InetAddress;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ESConfig {
//就是配置文件中的ip
@Value(\"${elasticsearch.ip}\")
private String host;
//配置文件中的端口
@Value(\"${elasticsearch.port}\")
private String port;
//配置文件中的集群名字
@Value(\"${elasticsearch.cluster-name}\")
private String clusterName;
//这个就是连接池,如果自己玩单机的话,其实可以不要的
@Value(\"${elasticsearch.pool}\")
private String poolSize;
@Bean(name = \"client\")
public TransportClient transportClient() {
TransportClient client = null;
try {
Settings setting = Settings.builder()
.put(\"cluster.name\", clusterName)
.put(\"client.transport.sniff\", false)
.put(\"thread_pool.search.size\", Integer.parseInt(poolSize))
.build();
client = new PreBuiltTransportClient(setting);
TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(host), Integer.valueOf(port));
client.addTransportAddresses(transportAddress);
} catch (Exception e) {
System.out.println(\"失败!\");
}
return client;
}
}
-
开始增删改差
为了减轻小伙伴们的压力,lz就不制作工具类了,通过最直观的方式展现给大家最直观的用法。
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.DateUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
@RestController
public class ESController {
@Autowired
private TransportClient client;
//相当于数据库名字
private String indexName=\"student\";
//相当于表的名字,随意起名
private String type=\"_doc\";
@RequestMapping(\"/createIndex\")
@ResponseBody
public String createIndex(HttpServletRequest request, HttpServletResponse response) {
boolean b = client.admin().indices().exists(new IndicesExistsRequest(indexName)).actionGet().isExists();
if(!b) {
CreateIndexResponse indexResponse = client.admin().indices().prepareCreate(indexName).execute().actionGet()isAcknowledged();
}
else{
return \"索引创建失败\";
}
return \"索引创建成功\";
}
/**
* 像数据库(index)的某张表中(Type)中插入数据
* 需要注意的是,如果insert的数据的id相同的话,会覆盖原先的记录
*/
@RequestMapping(\"/insert\")
@ResponseBody
public String insertJson() {
JSONObject jsonObject = new JSONObject();
jsonObject.put(\"number\", new Date());
jsonObject.put(\"name\", \"隔壁老王\");
jsonObject.put(\"age\", 11);
IndexResponse response = client.prepareIndex(indexName, type, “1”).setSource(jsonObject).get();
return response.getId;
}
/**
* 删除记录
*/
@RequestMapping(\"/delete\")
@ResponseBody
public String delete(String id) {
if(StringUtils.isNotBlank(id)) {
DeleteResponse response = client.prepareDelete(indexName, type, id).execute().actionGet();
return response.status().getStatus(), response.getId();
}
else{
return \"id为空\";
}
}
/**
* 更新数据
*/
@RequestMapping(\"/update\")
@ResponseBody
public String update(String id) {
if(StringUtils.isNotBlank(id)) {
JSONObject jsonObject = new JSONObject();
jsonObject.put(\"number\", new Date());
jsonObject.put(\"name\", \"隔壁老王\");
jsonObject.put(\"age\", 11);
ElasticsearchUtil.updateDataById(jsonObject, indexName, esType, id);
return \"id=\" + id;
}
else{
return \"id为空\";
}
}
/**
* 获取数据
*/
@RequestMapping(\"/select\")
@ResponseBody
public String getData(String id){
if(StringUtils.isNotBlank(id)) {
GetResponse response = client.prepareGet(indexName, type, id).get();
return response.toString();
}
else{
return \"id为空\";
}
}
}
-
结束语
当然elasticsearch的操作不知如何,如分词查询,模糊查询,正则查询,elasticsearch本来就是一个全文检索方面特别优秀的框架,相关内容我以后也会更新,当然,本人现在只是一个coder(实习生),如有不对之处,希望大家多多包涵,感谢。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。


