基于之前自己搭建的springcloud项目来写的
项目提供者:
pom.xml:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.6.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.67</version>
<scope>compile</scope>
</dependency>
Service
/**
* 查询es中的goods的测试
*/
public List<Goods> esGoods2(String index, String str, String fileName);
ServiceImpl:
@RequestMapping("esGoods2")
@Override
public List<Goods> esGoods2(@RequestParam("index") String index,@RequestParam("str") String str,@RequestParam("fileName") String fileName) {
List<Goods> goods=new ArrayList<Goods>();
String s = esUtil.keywordSearch(index, str, 0, 20, fileName);
Object o = JSONObject.toJSON(s);
ArrayList<Goods> goods1 = JSON.parseObject((String) o, new TypeReference<ArrayList<Goods>>() {
});
for(Goods g:goods1){
System.out.println(g);
goods.add(g);
}
return goods;
}
ESUtil:
package com.jbit.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
public class ESUtil {
private RestHighLevelClient client;
/**
* 根据索引名以及ID查询数据
* @param index 索引名称
* @param id 数据ID
* @return
*/
public String getDocument(String index, String id){
GetResponse getResponse = null;
try{
client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
GetRequest getRequest = new GetRequest(index,"_doc", id );
getResponse = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(JSONObject.toJSONString(getResponse));
client.close();
}catch(IOException e){
e.printStackTrace();
}
return JSONObject.toJSONString(getResponse);
}
/**
* 进行全文检索
* @param index
* @param value
* @param current
* @param size
* @return
*/
public String keywordSearch(String index, String value,
int current, int size,String fileName){
List<Map<String, Object>> result = null;
try{
client = new RestHighLevelClient(
RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//支持全词搜索的字段有:keywordName,keywordAuthor"
searchSourceBuilder.query(QueryBuilders
.multiMatchQuery(value, fileName));
searchSourceBuilder.from(current);
searchSourceBuilder.size(size);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSONObject.toJSONString(searchResponse));
//处理返回结果
result = dealResult(searchResponse.getHits());
client.close();
}catch(IOException e){
e.printStackTrace();
}
return JSONObject.toJSONString(result);
}
/**
* 分页查询索引所有数据
* @param index
* @param current
* @param size
* @return
* @throws IOException
*/
public String searchAll(String index, int current, int size) throws IOException {
client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.from(current);
searchSourceBuilder.size(size);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSONObject.toJSONString(searchResponse));
//处理返回结果
SearchHits hits = searchResponse.getHits();
client.close();
return JSONObject.toJSONString(hits);
}
private List<Map<String, Object>> dealResult(SearchHits hits){
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
for (SearchHit hit : hits.getHits()) {
Map<String, Object> map = hit.getSourceAsMap();
result.add(map);
}
return result;
}
}
消费者:
Service:
@RequestMapping("esGoods2")
public List<Goods> esGoods2(@RequestParam("index") String index, @RequestParam("str") String str, @RequestParam("fileName") String fileName);
controller:
@RequestMapping("esGoods2")
public List<Goods> esGoods2(@RequestParam("index") String index, @RequestParam("str") String str, @RequestParam("fileName") String fileName) {
System.out.println("esGoods2");
return orderService.esGoods2(index,str,fileName);
}
index:索引名称
str:查询的条件值
fileName:查询的字段
测试: