1.去http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
中下载jdk的安装文件。我下载jdk-8u77-linux-x64.gz文件。
2.mkdir /usr/local/java
3.把 jdk-8u77-linux-x64.gz 放到 /usr/local/java 下
4.cd /usr/local/java
5.执行命令tar -zxvf jdk-8u77-linux-x64.gz 进行解压,解压后发现/usr/local/java多了一个jdk1.8.0_77文件夹。
通过以上步骤,jdk就已经全部安装完成了。
下面,就是环境变量的配置。
1.使用vim /etc/profile编辑profile文件
2.在/etc/profile底部加入如下内容
JAVA_HOME=/usr/local/java/jdk1.8.0_77
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
3.以上,环境变量配置完成。需要注意的是,PATH在配置的时候,
一定要把$JAVA_HOME/bin放在前面,不然使用java命令时,系统会找到以前的java,
再不往下找了。这样java这个可执行文件运行的目录其实不在$JAVA_HOME/bin下,
而在其它目录下,会造成很大的问题。
4.还要注意,以前其它教程写的CLASSPATH=$JAVA_HOME/lib.tools.jar,
不知道以前的版本是怎么样的,现在的版本是没有这样的jar包的。
5.最后使用source /etc/profile让profile文件立即生效。
命令测试
使用javac命令,不会出现command not found错误
使用java -version,出现版本为java version "1.8.0_77"
echo $JAVA_HOME, echo $CLASSPATH, echo $PATH,看看自己的配置是否都正确。
安装Solr5.3
去http://www.apache.org/dyn/closer.lua/lucene/solr/5.3.0下载Solr安装文件solr-5.3.0.tgz。
将solr-5.3.0.tgz文件放到/tmp目录下,执行如下脚本:
# cd /tmp
# tar -zxvf solr-5.3.0.tgz // 解压压缩包
创建应用程序和数据目录
# mkdir -p /data/solr
创建运行solr的用户并赋权
# groupadd solr
# useradd -g solr solr
# chown -R solr.solr /data/solr
安装solr服务
# solr-5.3.0/bin/install_solr_service.sh solr-5.3.0.tgz -d /data/solr -i /usr/local/solr
检查服务状态
# service solr status
将会看到如下输出:
Solr process 29692 running on port 8983
{
"solr_home":"/data/solr/data/",
"version":"5.3.0 1696229 - noble - 2015-08-17 17:10:43",
"startTime":"2015-09-16T01:32:03.919Z",
"uptime":"0 days, 0 hours, 3 minutes, 6 seconds",
"memory":"89.8 MB (%18.3) of 490.7 MB"
}
http://你的ip::8983/solr 这个是管理界面
例如:http://192.168.31.129:8983/solr/
http://你的ip::8983/solr 这个是管理界面
2,设计你自己的搜索索引
http://你的ip::8983/solr 这个是管理界面,选择你创建的core
只关注 add Documents 和 query 即可,一个事加索引一个事查询,特别容易理解
add Documents界面,已经有例子,索引了两个字段 id和title ,你改下数据提交
Query 界面 q=*:* 查询所有
q=title:a* 查询title为a开头的
简单玩几次很容易明白
现在有id,title 我想添加一个自己的字段,type怎么办?
去data目录grep "title", 找到id和title的配置项,类似:
<field name="title" type="text" indexed="true" stored="false" multiValued="true"/>
参考下填写上type即可
service solr stop/start 重启服务
回到管理界面,添加数据,假设你要联合搜索title和type
那么 q= title:xx fq= type:xx, 多加一个fq明白了吧
3,写一个php程序
经过1,2个研究,基本能做到建立数据,查出数据现在就写一个php程序完成这些功能
参考: PHP: Solr - Manual
SolrInputDocument 输入文档
SolrClient 这个是用户连接solr服务器
SolrQuery 这个是构建搜索条件
直接上程序好了:
class Search
{
private $client;
public function __construct() {
$options = [
'hostname' => 'localhost', //solr服务器的ip
'path' => 'solr/corename', //这个解决core的问题,corename就是你的core
'wt' => 'json',
];
$this->client = new \SolrClient($options);
}
public function addIndex($id, $type, $content) {//加索引的函数
$doc = new \SolrInputDocument();
$doc->addField('id', $type . "." . $id); //保证id唯一我把type加上了
$doc->addField('type', $type);
$doc->addField('title', $content);
$client = $this->client;
$updateResponse = $client->addDocument($doc);
$client->commit(); //一定要commit才能立即生效
$ret = ($updateResponse->getResponse());
if ( isset($ret->responseHeader['status']) ) {
return $ret->responseHeader['status'] == 0?true:false;
}
return false;
}
public function search($key, $type=0, $page=0, $limit=15) {
$query = new \SolrQuery();
$query->setQuery('title:' . $key . "*"); //这个是设置keyword
$query->setStart($page); //分页的
$query->setRows($limit);
if($type) {
$query->addFilterQuery('type:' . $type); //用到fq了
}
$query->addField('id')->addField('title')->addField('type'); //这里是你要查哪些字段
$client = $this->client;
$query_response = $client->query($query);
$response = $query_response->getResponse();
$response = ($response->response);
if ( is_array($response->docs) ) {
foreach($response->docs as &$doc) {
$id = explode(".", $doc->id);
if( isset($id[1]) ) {
$doc->id = $id[1];
}
$doc->type = isset($doc->type[0])?$doc->type[0]:'';
}
}
return ($response);
}
}