小言_互联网的博客

PHP使用SpringBoot Elasticsearch 进行搜索排序

298人阅读  评论(0)

springboot+elasticsearch实现一个搜索引擎,PHP使用接口调用
一、elasticsearch的安装
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。(如何安装elasticsearch?)

二、elasticsearch-head下载及安装
1、谷歌浏览器可以直接在Chrome商城中安装elasticsearch-head插件

2、其他浏览器安装elasticsearch-head插件

三、完成springboot 和 elasticsearch的整合
1、创建spring boot项目,加载pom.xml。

在里面添加:

 这里面就贴出传递sql的关键代码:


  
  1. public static Map <String, Object> setSqlOrderMap(String sql) {
  2. if(Util.isEmpty(sql)) return null;
  3. sql = sql.toLowerCase();
  4. String regx = "\\s+order\\s+by.*";
  5. Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
  6. Matcher matcher = pattern.matcher(sql);
  7. String regxSql = "";
  8. while (matcher.find()) {
  9. regxSql = matcher.group();
  10. }
  11. if(Util.isEmpty(regxSql.trim())) return null; //没有排序
  12. int orderIndex=regxSql.trim().indexOf("order");
  13. if(orderIndex < 0) return null; //没有排序
  14. String orderString = regxSql.trim().substring(orderIndex+5);
  15. int index =orderString.trim().indexOf("by");
  16. if(index < 0) return null; //没有排序
  17. String result = orderString.trim().substring(index+2);
  18. String[] order = result.split(",");
  19. ArrayList list = new ArrayList();
  20. for (int i = 0 ; i <order.length ; i++ ) {
  21. String[] orderBy = order[i].trim().split(" ");
  22. for (int j = 0 ; j <orderBy.length ; j++ ) {
  23. if(Util.isEmpty(orderBy[j])) continue; //去掉空格
  24. list.add(orderBy[j].trim());
  25. }
  26. }
  27. String sortList[]= new String[list.size()];
  28. list.toArray(sortList);
  29. Map<String,Object> map = new HashMap <>();
  30. for (int k = 0; k < sortList.length ; k++ ) {
  31. if(k+1 <= sortList.length && ((k+1) % 2) == 0 || k == (sortList.length-1)){
  32. map.put(sortList[k-1].trim(),sortList[k].trim());
  33. }
  34. }
  35. return map;
  36. }

比如我们传递一个sql:


select * from csdn where nickname = "360" order by createdat DESC, vip DESC;

那么截取的排序map如下:

{addTime=desc,vip=desc}

这个时候从Elasticsearch搜索就是按照{addTime=desc,vip=desc}来进行排序了:

当然了,我的vip在写入Elasticsearch实际上是数字,接口里面做了一层转义。

以上主要介绍了SpringBoot 做一个Elasticsearch搜索查询,你可以把你需要查询的语句,比如索引名称,数据源,执行的where条件,排序拼用加密的方式来请求,SpringBoot进行解密处理,在执行Elasticsearch搜索查询排序,返回结果即可


转载:https://blog.csdn.net/lchmyhua88/article/details/116261633
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场