Elasticsearch是用Java开发的,是当前流行的企业级搜索引擎。广泛用于云计算中,能够达到近实时搜索。 与springboot 集成也是非常方便的。具体步骤如下:
1.添加maven依赖
<properties>
<elasticsearch.version>6.1.3</elasticsearch.version>
</properties>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2 在application.properties 中添加elasticsearch的配置信息
#es
elasticsearch.host=192.168.0.108
elasticsearch.port=9300
elasticsearch.clustername=test-elasticsearch
3 创建elasticsearch配置类
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class MyESConfig {
private String host;
private String port;
private String clustername;
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 String getClustername() {
return clustername;
}
public void setClustername(String clustername) {
this.clustername = clustername;
}
@Bean
public TransportClient client() throws UnknownHostException {
Settings settings = Settings.builder().put("cluster.name", clustername).
put("client.transport.sniff", true)
.build();
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(host), Integer.parseInt(port)));
return client;
}
}
配置代码已经准备好了。下面就开始 使用TransportClient 对elasticsearch集群操作了。 对es集群的操作分为:index的操作,type 的操作,document的操作,搜索操作。
4 index 、type的操作
//注入transportClient
@Autowired
private TransportClient client;
//拿到索引管理
public static IndicesAdminClient getAdminClient() {
return client.admin().indices();
}
//创建索引
public static boolean createIndex(String indexName, int shards, int replicas) {
Settings settings = Settings.builder()
.put("index.number_of_shards", shards)
.put("index.number_of_replicas", replicas)
.build();
CreateIndexResponse createIndexResponse = getAdminClient()
.prepareCreate(indexName.toLowerCase())
.setSettings(settings)
.execute().actionGet();
return createIndexResponse.isAcknowledged()?true:false;
}
//删除索引
public static boolean deleteIndex(String indexName) {
DeleteIndexResponse deleteResponse = getAdminClient()
.prepareDelete(indexName.toLowerCase())
.execute()
.actionGet();
return deleteResponse.isAcknowledged()?true:false;
}
5 document的操作
- 添加文档
//添加文档
public boolean putDocument(){
ElasticUtil.client = this.client;
try {
XContentBuilder doc = jsonBuilder()
.startObject()
.field("id", "1")
.field("title", "springboot es 的集成")
.field("content", "springboot es 的集成的步骤是啥 啥 啥")
.field("date", "2018-03-27 17:27:00")
.endObject();
System.out.println(doc.toString());
response = client.prepareIndex("myindex", "mytype", "1")
.setSource(doc)
.get();
System.out.println(response.status());
return true;
}catch (IOException e){
e.printStackTrace();
return false;
}
}
- 获取文档
public String getDocument(){
ElasticUtil.client = this.client;
GetResponse response =client.prepareGet("myindex","mytype","1").get();
return response.getSourceAsString();
}
- 删除文档
public String deleteDocument(){
ElasticUtil.client = this.client;
DeleteResponse response=client.prepareDelete(("myindex","mytype","1").get();
String result = "id: "+ response.getId().toString() +"status: "+ response.status().toString();
return result;
}
- 更新文档
public String updateDocument() throws IOException, ExecutionException, InterruptedException {
ElasticUtil.client = this.client;
UpdateRequest request=new UpdateRequest();
request.index("myindex")
.type("mytype")
.id("1")
.doc(
jsonBuilder().startObject()
.field("content","修改后的 springboot es 的集成的步骤是啥 啥 啥")
.endObject()
);
UpdateResponse response=client.update(request).get();
String status = response.status().toString();
String type = response.getType().toString();
String id = response.getId().toString();
long version = response.getVersion();
String result = "status: "+ status+" type: "+ type + " id: "+ id +" version: "+ version;
return result;
}
6 document 的搜索
@ResponseBody
public List<Map<String,Object>> searchCourseWithKeyWord(@RequestParam(value = "keyWord", required = true) String keyWord){
List<Map<String,Object>> hitsMap = new ArrayList<>();
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyWord,"title","content");
SearchResponse response = client.prepareSearch("myindex")
.setQuery(queryBuilder)
.setSize(500)
.get();
SearchHits hits=response.getHits();
for(SearchHit hit:hits){
Map<String,Object> map=hit.getSourceAsMap();
hitsMap.add(map);
}
return hitsMap;
}
转载于:https://my.oschina.net/nxxYqmvPOvsfH/blog/1785756