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。

在里面添加:

PHP使用SpringBoot Elasticsearch 进行搜索排序_第1张图片

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

public static Map 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  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}来进行排序了:

PHP使用SpringBoot Elasticsearch 进行搜索排序_第2张图片

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

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

你可能感兴趣的:(大数据,人工智能,SpringBoot,Elasticsearch,搜索引擎)