返回给前端的实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult {
private Long total;
private List<RequestParamDoc> tkyb;
}
/*
* 前端的集合类
* */
@Data
@NoArgsConstructor
public class RequestParamDoc {
private float score;
private String gsbh;
private String gsmc;
private String zcd;
private String gljg;
private String gxxl;
private String sss;
private String ssj;
private String gsjc;
public RequestParamDoc(RequestParam requestParam) {
this.score = requestParam.getScore();
this.gsbh = requestParam.getGsbh();
this.gsmc = requestParam.getGsmc();
this.zcd=requestParam.getZcd();
this.gljg = requestParam.getGljg();
this.gxxl = requestParam.getGxxl();
this.sss = requestParam.getSss();
this.ssj = requestParam.getSsj();
this.gsjc = requestParam.getGsjc();
}
}
es对应的实体类
/**
*es对应的实体类
*/
@Data
public class RequestParam {
private String gsbh;
private String gsmc;
private String zcd;
private String gljg;
private String gxxl;
private String sss;
private String gsjc;
private String ssj;
private float score;
}
前端传递的搜索参数实体类
@Data
public class RequestParams {
private String key; //可以里面包含的是分词的所有字段
private Integer page;
private Integer size;
}
controller层
@RestController
public class WayController {
@Autowired
private IWayService wayService;
/**
* 关键词搜索
* @param params
* @return
*/
@PostMapping("/way/list")
public PageResult search(@RequestBody RequestParams params){
return wayService.search(params);
}
}
service层接口
public interface IWayService{
/**
* 关键词分页查询
*
*/
PageResult search(RequestParams params);
}
service实现类
@Slf4j
@Service
public class WayService implements IWayService {
@Autowired
private RestHighLevelClient client;
/**
* 关键词分页查询
*
* @param params
* @return
*/
@Override
public PageResult search(RequestParams params) {
//获取关键词
String key = params.getKey();
//创建索引库的链接
SearchRequest searchRequest = new SearchRequest("hzgs_fgb_gsxx");
//创建查询条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//创建bool查询
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//用公司名称跟路线名称
if (StringUtils.isBlank(key)) {
boolQueryBuilder.must(QueryBuilders.matchAllQuery());
} else {
boolQueryBuilder.must(QueryBuilders.multiMatchQuery("gsmc", key, "gxxl", key));
}
// 设置搜索条件
searchSourceBuilder.query(boolQueryBuilder);
//进行分页设置
searchSourceBuilder.from(params.getPage());
searchSourceBuilder.size(params.getSize());
searchRequest.source(searchSourceBuilder);
// 增加高亮查询
HighlightBuilder highlightBuilder = new HighlightBuilder();
// 设置高亮条件
highlightBuilder.preTags("<span>");
highlightBuilder.field("gsmc");
highlightBuilder.postTags("</span>");
searchSourceBuilder.highlighter(highlightBuilder);
List<RequestParamDoc> list = new ArrayList<>();
long total = 0L;
try {
//在索引库中进行查询
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
//获取总条数
total = response.getHits().getTotalHits().value;
for (SearchHit hit : hits) {
String jsonStr = hit.getSourceAsString();
//json转化为对象
RequestParamDoc requestParamDoc = JSON.parseObject(jsonStr, RequestParamDoc.class);
list.add(requestParamDoc);
}
} catch (IOException e) {
log.error("Es搜索异常!");
e.printStackTrace();
}
return new PageResult(total, list);
}
}
Springboot启动类
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class WayApplication {
public static void main(String[] args) {
SpringApplication.run(WayApplication.class, args);
}
@Bean
public RestHighLevelClient client(){
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
//进行es的授权
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("es111","123344555"));
//es的链接库
return new RestHighLevelClient(RestClient.builder(HttpHost.create("http://127.0.0.1:9200")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
httpAsyncClientBuilder.disableAuthCaching();
return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
}));
}
}