一、solr软件包下载
Solr 可从 Solr 网站获取。您可以在此下载最新版本的 Solr:https://lucene.apache.org/solr/mirrors-solr-latest-redir.html。
Solr 有三个独立的软件包:
solr-7.0.0.tgz:适用于 Linux / Unix / OSX 系统
solr-7.0.0.zip:适用于 Microsoft Windows 系统
solr-7.0.0-src.tgz:Solr 源代码包。如果您想在 Solr 上开发而不使用官方的 Git 存储库,这将非常有用。
我使用的6.6版本
http://archive.apache.org/dist/lucene/solr/6.6.0/
二、启动solr
进入: solr-6.0.0\bin
运行命令: solr.cmd start
solr默认监听的是8983端口
打开web管理客户端:http://localhost:8983/solr/,查看结果

三、solr添加文档的三种方式
- 在可视化管理界面操作

2.从数据库同步数据
进入/server/solr/,新建目录,目录名自己随便定义,我定义的是core_test,然后将~/solr-root/server/solr/configsets/basic_configs/目录中的conf目录复制到刚才新建的core_test中。
data-config.xml
新建data-config.xml文件,然后将下面内容写入文件中。
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/emails"
user="root"
password="root"
batchSize="-1" />
<document>
<entity name="users" dataSource="source1"
query="select id,name,id_card,staff_level,status from users">
<field column="id" name="id" />
<field column="name" name="name" />
<field column="id_card" name="id_card" />
<field column="staff_level" name="staff_level" />
<field column="status" name="status" />
</entity>
</document>
</dataConfig>
说明:
emails是库名,下面几个field定义的就是select出来的那几个字段。
solrconfig.xml
编辑solrconfig.xml文件,搜索“requestHandler”,讲下面代码加入并列的requestHandler配置块中:
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
managed-schema
编辑managed-schema文件,保留以下下三个field:
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
编辑其它field,跟data-config.xml文件中的field对应:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="name" type="string" indexed="true" stored="true"/>
<field name="id_card" type="string" indexed="true" stored="true"/>
<field name="staff_level" type="string" indexed="true" stored="true"/>
<field name="status" type="string" indexed="true" stored="true"/>
下载数据库链接库
下载地址:http://central.maven.org/maven2/mysql/mysql-connector-java/8.0.11/mysql-connector-java-8.0.11.jar
将刚才现在的
mysql-connector-java-8.0.11.jar
~/solr-root/dist 目录下的
solr-dataimporthandler-extras-7.5.0.jar 、solr-dataimporthandler-7.5.0.jar
这三个jar包一起拷贝到~/solr-root/server/solr-webapp/webapp/WEB-INF/lib目录下
启动solr
执行启动命令:solr.cmd start
启动成功后按下图操作:

执行完成后就可以查询:

3.使用php操作solr
安装solr扩展
(1)、安装libssh2扩展
下载地址:http://windows.php.net/downloads/pecl/releases/ssh2/;
解压完后,会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb。
将 php_ssh.dll、php_ssh2.pdb 放到你的 PHP 扩展目录下 php/ext/ 下。
将libssh2.dll 复制到 c:/windows/system32;
php.ini中加入 extension=php_ssh2.dll;
重启服务器,查看phpinfo(),是否有显示php_ssh2扩展加载成功。
(2)、安装solr扩展
下载地址:http://windows.php.net/downloads/pecl/releases/solr/;
将压缩包的php_solr.dll、php_solr.pdb 放到你的 php 扩展目录下 php/ext/ 下。
php.ini中加入 extension=php_solr.dll
重启服务器,查看phpinfo(),是否有显示solr扩展加载成功。
安装之前需使用phpinfo()查看自己版本信息、下载相匹配的扩展
安装完成后:
链接solr:
$option = array(
'hostname' => '192.168.1.165', // solr 服务器ip地址
'login' => 'admin', // 用户名 (solr配置了才需要传)
'password' => 'admin', // 密码 (solr配置了才需要传)
'port' => 8983, // 端口
'path' => 'solr/testCore' // 核心
);
$solrClient = new SolrClient($option);
// 通过ping来判断是否连接成功
try{
$solrClient->ping();
}catch(Exception $e){
// 异常,solr服务器连接失败
echo 'sorl 服务器连接失败!';
die($e->getMessage());
}
添加文档:
$solrDoc = new SolrInputDocument();
$solrDoc->addField('ID', 7);
$solrDoc->addField('title', '标题11111111111111111111');
$solrDoc->addField('author', 'chenfan');
$solrDoc->addField('content', 'this is test php solrClienthis is test php solrClienthis is test php solrClienthis is test php solrClien');
$solrDoc->addField('lastUpdateTime', time());
$solrDoc->addField('isDelete', 'N');
$solrDoc2 = new SolrInputDocument();
$solrDoc2->addField('ID', 8);
$solrDoc2->addField('title', '标题222222222222222222222');
$solrDoc2->addField('author', 'chenfan');
$solrDoc2->addField('content', 'this is test php solrClienthis is test php solrClienthis is test php solrClienthis is test php solrClien22222222');
$solrDoc2->addField('lastUpdateTime', time());
$solrDoc2->addField('isDelete', 'N');
$solrDocs = array($solrDoc, $solrDoc2);
// 向 solr 服务器添加文档集,失败则抛出异常
try{
$result = $solrClient->addDocuments($solrDocs, true);
// 需 commit 才会立即索引
$solrClient->commit();
// 优化
$solrClient->optimize();
if($result->getResponse()){
echo '添加成功,添加的数据为:';
print_r($result->getRawRequest());
}
}catch(Exception $e){
echo 'solr 添加异常!';
die($e->getMessage());
}
注:以上字段需要已在managed-schema中配置
更新文档:
更新文档和添加文档一样,只要在数据中指定要更新的id即可。
查询文档:
$dismaxQuery = new SolrDisMaxQuery('lucene');
$dismaxQuery->setQuery('title:标题') // 查询条件
->addSortField('ID', SolrQuery::ORDER_ASC) // 排序
->setStart(0) // 开始数
->setRows(20) // 条数
->setGroup(true) // 开启聚合
->addGroupField('author'); // 聚合列
try{
$result = $solrClient->query($dismaxQuery);
$result = $result->getResponse();
// $result = $result->response->docs;
}catch(Exception $e){
echo 'solr 查询异常!';
die($e->getMessage());
}
print_r($result);
删除文档:
$result = $solrClient->deleteByQuery('title:标题');
$solrClient->commit();
$ret = $result->getResponse();
var_dump($ret);