PHP使用SpringBoot Elasticsearch 进行搜索排序

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的关键代码:

public static Map<String, Object> setSqlOrderMap(String sql) {
  if(Util.isEmpty(sql)) return null;
  sql = sql.toLowerCase();

  String regx = "\\s+order\\s+by.*";
  Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
  Matcher matcher = pattern.matcher(sql);
  String   regxSql = "";
  while (matcher.find()) {
    regxSql = matcher.group();
  }

  if(Util.isEmpty(regxSql.trim())) return null; //没有排序

  int orderIndex=regxSql.trim().indexOf("order");

  if(orderIndex < 0) return null; //没有排序

  String orderString = regxSql.trim().substring(orderIndex+5);
  int index =orderString.trim().indexOf("by");


  if(index < 0) return null; //没有排序

  String result = orderString.trim().substring(index+2);
  String[] order = result.split(",");

  ArrayList list = new ArrayList();
  for (int i = 0 ; i <order.length ; i++ ) {
    String[] orderBy = order[i].trim().split(" ");
    for (int j = 0 ; j <orderBy.length ; j++ ) {
      if(Util.isEmpty(orderBy[j])) continue; //去掉空格
      list.add(orderBy[j].trim());
    }
  }

  String sortList[]= new String[list.size()];
  list.toArray(sortList);

  Map<String,Object> map  = new HashMap<>();
  for (int k = 0; k < sortList.length ; k++ ) {
    if(k+1 <= sortList.length && ((k+1) % 2) == 0 || k == (sortList.length-1)){
      map.put(sortList[k-1].trim(),sortList[k].trim());
    }
  }

  return map;
}

比如我们传递一个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搜索查询排序,返回结果即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值