Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
———from 百度百科
之前题目都是放在mysql数据库利用mysql自带的全文索引进行匹配题目,但是搜索结果不够优化,搜索速度慢一丢丢,主要是结果不够优化,明明数据库有的题目,因为一个标点不一致可能就搜不到题目。
php写的接口源码:
<?php
header("Content-type:text/html;charset=utf-8");
$str = $_GET['w'];
$link = mysqli_connect('localhost:3306','xxxxxxxxxxxx','xxxxxxxxxxxxxxxxxx','xxxxxxxxxxxxx') or die("提示:数据库连接失败!");
mysqli_set_charset($link,'utf8');
$sql = "SELECT * FROM tiku WHERE MATCH ti AGAINST ('$str' IN NATURAL LANGUAGE MODE)";
$result = $link->query($sql);
if ($result->num_rows > 0) {
$row = mysqli_fetch_row($result);
echo $row[0];
} else {
echo "没搜到答案鸭,去掉标点选项字母等,使用关键词再试一下吧!";
}
$link->close();
?>
之后朋友用java的SpringBoot框架利用solr写了一个项目实现了高效的搜题。以下记录以下搭建过程中遇到的问题:
环境
CentOS7 + jdk1.8 + solr
因为SpringBoot项目里面封装了tomcat,这里就不要了。
安装jdk1.8
1.查询是否有旧版的jdk
rpm -qa | grep java
可能有的CentSO7自带openjdk,但最好也是将其卸载然后安装Oracle公司的jdk
2.卸载
rpm -e –nodeps
-nodeps就是需要卸载的版本
3.创建一个Java文件夹
mkdir /usr/local/java
4.将安装包上传到/usr/local/java/目录下
可以官网进行下载,但是国外的网贼慢,需要翻墙下载:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
也可以用:
链接:https://pan.baidu.com/s/1IO7KbcYMtKJXGZqMeETi-w 密码:wtk4
5.解压
tar -zxvf 压缩包名
# tar -zxvf jdk-8u144-linux-x64.tar.gz
如果提示command not found,那需要安装下tar命令,执行命令:yum install -y tar
6.配置环境变量
vi /etc/profile
在/etc/profile文件的末尾加上以下配置:
JAVA_HOME=/usr/local/java/jdk1.8.0_144
JRE_HOME=/usr/local/java/jdk1.8.0_144/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
注意前两个量要改成自己的具体路径(jdk版本可能不同)
使修改后的/etc/profile文件立即生效:
source /etc/profile
7.测试
java -version
安装solr
因为配置文件等等直接被朋友配置好了,这里我只进行了简单的搭建。
下载地址:
http://mirrors.hust.edu.cn/apache/lucene/solr/
解压:
tar -zxvf solr-7.4.0.tgz
启动:
solr-7.4.0/bin/solr start -force
或者直接cd到solr-。4.0/bin/solr目录下,然后运行
./start -force
然后打开页面:http://localhost:8983/solr/
另外我是阿里云的服务器,要注意,要去阿里云服务器的控制台,防火墙放行端口。
之后配置solr的步骤:创建core目录,配置xml文件,导入数据等等……
运行jar包
朋友打包好的jar包直接一个命令:
nohup java -jar ×××-0.0.1-SNAPSHOT.jar
即可运行,访问端口即可。
调用接口
浏览器能正常访问但是php调用报错。
报错:
failed to open stream: HTTP request failed!
两个原因,首先是Java写的接口太安全了,不运行脚本访问,伪造请求头即可解决:
php.ini配置文件中两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent=“PHP”(表示通过哪种脚本访问网络,默认前面有个 " ; " 去掉即可。),并且将user_agent="PHP"修改为:
user_agent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)"
但是还报错,经过分析,API传入参数时候没有进行url编码,导致报错,php一个函数urlencode()完美解决!
120w题库并且每晚都自动更。