solr优化搜题接口

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题库并且每晚都自动更。

发布了8 篇原创文章 · 获赞 12 · 访问量 6041

猜你喜欢

转载自blog.csdn.net/weixin_43631579/article/details/105239908