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搜索查询排序,返回结果即可
转载:https://blog.csdn.net/lchmyhua88/article/details/116261633