一、服务器上搭建solr服务器
1、安装Tomcat8
安装路径/usr/local/tomcat
2、下载solr安装包
wget http://mirrors.hust.edu.cn/apache/lucene/solr/7.4.0/solr-7.4.0.tgz
解压到opt下
3、部署solr
1)进入solr-7.4.0 文件夹
将其下面的server/solr-webapp 拷贝到 tomcat下的webapps里 并将webapp重命名为solr
cp -r /opt/solr-7.4.0/server/solr-webapp/webapp/ /usr/local/tomcat/webapps/
进入webapps执行
mv webapp/ solr
2)拷贝solr-7.4.0\server\lib\ext 下的jar包以及lib目录下gmetric4j-1.0.7.jar,以metrics开头的jar包拷贝到 tomcat\webapps\solr 项目的WEB-INF\lib下
cd /opt/solr-7.4.0/server/lib/ext/
cp * /usr/local/tomcat/webapps/solr/WEB-INF/lib/
进入lib
cp gmetric4j-1.0.7.jar metrics-* /usr/local/tomcat/webapps/solr/WEB-INF/lib/
3)拷贝solr-7.4.0\server 下的solr文件夹到其它非中文目录下,重命名为solrhome,我是建立到了/usr/local下
cd /opt/solr-7.4.0/server/
cp -r solr /usr/local/solrhome
4)修改/usr/local/tomcat/webapps/solr/WEB-INF\web.xml, 找到如下代码,/put/your/solr/home/here 改为你自己的solrhome的路径,我的是/usr/local/solrhome路径。
vim /data/soft/tomcat/webapps/solr/WEB-INF/web.xml
将注释去掉,并将solrhome的目录位置写进去:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
5)拷贝solr-7.4.0\server\resources下的log4j2.xml到/usr/local/tomcat/webapps/solr/WEB-INF\classes,如果WEB-INF下没有classes文件那么就创建一个classes文件夹
mkdir -p /usr/local/tomcat/webapps/solr/WEB-INF/classes
cp /opt/solr-7.4.0/server/resources/log4j2.xml /usr/local/tomcat/webapps/solr/WEB-INF/classes/
6)浏览器访问 http://ip:18080/solr/index.html
如出现403错误
找到 /usr/local/tomcat/webapps/solr/WEB-INF/web.xml
找到如下代码,将其注释即可。
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
至此solr可以在浏览器上访问
二、建立core,连接数据库
1、建立core
将solr-7.4.0/example/example-DIH/solr/db下的文件 拷贝到 /usr/local/sorlhome/new_core下
cp -r /opt/solr-7.4.0/example/example-DIH/solr/db/* /usr/local/sorlhome/new_core/
在浏览器主界面Core Admin点击Add Core可以在new_core/ 要建立一个data文件夹用来存储数据
2、连接数据库
(1)下载mysql驱动包
wget http://central.maven.org/maven2/mysql/mysql-connector-java/6.0.6/mysql-connector-java-6.0.6.jar
并将其拷贝到 /usr/local/tomcat/webapps/solr/WEB-INF/lib/
(2)拷贝dist文件夹里的solr-dataimporthandler-7.2.0.jar
cp /opt/solr-7.4.0/dist/solr-dataimporthandler-* /usr/local/tomcat/webapps/solr/WEB-INF/lib/
(3)拷贝lucene-libs文件夹里的中文分析器的jar包
cp /opt/solr-7.4.0/contrib/analysis-extras/lucene-libs/* /usr/local/tomcat/webapps/solr/WEB-INF/lib/
(4)打开new_core下的conf目录在db-data-config.xml和managed-schema中进行配置
vim /usr/local/solrhome/new_core/conf/solrconfig.xml
<lib dir="../../../dist/" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="../../../dist/" regex="mysql-connector-java-.*\.jar" />
在lib
# 在文件底部
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
vim /usr/local/solrhome/new_core/conf/db-data-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource convertType="true" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/数据库名"
user="数据库用户名"
password="用户名对应的密码"/>
<document>
<entity name="user" query="SELECT * FROM user ">
<field column="id" name="id"/>
<field column="username" name="user_sername"/>
<field column="birthday" name="user_birthday"/>
<field column="sex" name="user_sex"/>
<field column="address" name="user_address"/>
</entity>
</document>
</dataConfig>
下载ik分词器 并将jar包放在WEB-INF 的lib下
vim /usr/local/solrhome/new_core/conf/managed-schema
加入
<!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
三、在PHP中使用solr
1、下载php的solr扩展 https://pecl.php.net/package/solr
注意:php有Thread Safe和NoneThread Safe之分,下载之前,请先确定你安装的php是哪种类型。
下载解压之后,将其中的dll文件放到php的扩展目录,对于php扩展所在目录,然后在php.ini开启solr扩展,再通phpinfo查看是否正常安装。
2、在Laravel项目中使用
1)安装Laravel5的solr依赖
composr require solarium/solarium
发现composer.json的"require" 中增加了一项
"solarium/solarium": "^4.0",
2)配置数据库
在app/config/database.php中增加
'solr' => [
'endpoint' => [
'localhost' => [
'host' => 'xxx9.159.1xx.17', //IP地址
'port' => 8080, //端口号
'core' => null,
'path' => '/solr/new_core',
'wt'=>'json',
],
],
],
3)代码中应用
a.增加索引/更新索引(根据所传id是否已经存在,存在则更新,否则新增)
public function update(Request $request) {
$data = $request->json()->all();
$client =new \Solarium\Client(\Config::get('database.solr'));
$update=$client->createUpdate();
$doc=$update->createDocument();
foreach ($data as $key=>$value){
$doc->$key=$value;
}
$update->addDocument($doc);
$update->addCommit();
$updateResponse=$client->update($update);
$res = $updateResponse->getResponse();
return $res->getStatusCode();
}
b.删除索引
public function delete(Request $request) {
$data = $request->json()->all();
$id=$data['id'];
$client =new \Solarium\Client(\Config::get('database.solr'));
$update = $client->createUpdate();
$update->addDeleteById($id);//通过id
//$update->addDeleteQuery($q);//通过查询条件
$update->addCommit();
$result = $client->update($update);
$res = $result->getResponse();
return $res->getStatusCode();
}
c.搜索
public function search(Request $request)
{
$data = $request->json()->all();
$key=$data['key'];
$enp_description=$data['enp_description'];
$client =new \Solarium\Client(\Config::get('database.solr'));
$query = $client->createSelect();
//设置q 查询字符串。查询所有是*:* , 根据指定字段查询
$query->setQuery('all: *' . $key . "*"); //这个是设置keyword
$result = $client->execute($query);
$res= $result ->getResponse();
return $res->getStatusCode();;
}