1 插件管理[Solr]
Mr Chen edited this page 2022-08-31 15:13:29 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Solr服务

Solr是一个独立的企业级搜索应用服务器它对外提供类似于Web-service的API接口。用户可以通过http请求向搜索引擎服务器提交一定格式的XML文件生成索引也可以通过Http Get操作提出查找请求并得到XML(及其他格式)的返回结果。

相关文档

使用插件说明

安装后台当前版本是8.2.0。同时也在dist文件下载了mysql驱动如下:
* mysql-connector-java-5.1.48.jar
* mysql-connector-java-8.0.17.jar


管理collection
添加collection,命令等同: ./solr create - c xxx
删除collection,命令等同: ./solr delete - c xxx

使用事例

  • 创建表
CREATE TABLE `test1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `value` text NOT NULL,
  `time` int(11) NOT NULL,
  `isdel` tinyint(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
  • 添加库
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-5.1.48.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
  • 找到requestHandler标签,添加如下
<requestHandler name="/dataimport" class="solr.DataImportHandler">  
     <lst name="defaults">  
        <str name="config">db-data-config.xml</str>  
     </lst>  
</requestHandler>
  • 创建(db-data-config.xml)文件【做好带有时间字段】
<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/test" user="root" password="root"/>
    <document>
    	<!-- 
			query 				| 获取全部数据的SQL
			deltaImportQuery 	| 是获取增量数据时使用的SQL 
			deltaQuery 			| 是获取pk的SQL
			parentDeltaQuery	| 是获取父Entity的pk的SQL
			deletedPkQuery 		| 增量索引删除主键ID查询
    	-->
    <entity name="test"
        pk="id"       
        query="select * from test1"
        deltaImportQuery="select * from test1 where id='${dih.delta.id}'"
        deltaQuery="select id from test1 where FROM_UNIXTIME(`time`,'%Y-%m-%d %H:%i:%s')>'${dih.last_index_time}'"
        deletedPkQuery="select id from test1 where FROM_UNIXTIME(`time`,'%Y-%m-%d %H:%i:%s')>'${dih.last_index_time}'">
            <field column="id" name="id" />
            <field column="name" name="name" />
            <field column="value" name="value" />
    </entity>
    </document>
</dataConfig>
  • managed-schema
默认的managed-schema,可在后台编辑添加
SOLR_TIMEZONE="UTC+8"
<requestHandler name="/replication" class="solr.ReplicationHandler" >
  <lst name="master">
   <str name="replicateAfter">commit</str>
   <str name="replicateAfter">startup</str>
   <str name="confFiles">schema.xml,stopwords.txt</str>
  </lst>
</requestHandler>
  • 从solr配置,修改配置文件
<requestHandler name="/replication" class="solr.ReplicationHandler" >
 <lst name="slave">
   <str name="masterUrl">http://127.0.0.1/core0/replication</str><!--主搜索引擎服务地址-->
   <str name="pollInterval">00:00:60</str><!--同步频率1分钟一次-->
   <str name="compression">internal</str>  
   <str name="httpConnTimeout">50000</str>     
   <str name="httpReadTimeout">500000</str>  
   <str name="httpBasicAuthUser">admin</str>  
   <str name="httpBasicAuthPassword">admin</str> 
 </lst>
</requestHandler>

masterUrl : 主服务器同步URL地址 
pollInterval:从服务器同步间隔,即每隔多长时间同步一次主服务器 
httpConnTimeout:设置连接超时(单位:毫秒) 
httpReadTimeout:如果设置同步索引文件过大,则应适当提高此值。(单位:毫秒) 
httpBasicAuthUser:验证用户名,需要和主服务器一致 
httpBasicAuthPassword:验证密码,需和主服务器一致 
compression:external or internal 使用SOLR自己的压缩算法或应用容器的

<requestHandler name="/replication" class="solr.ReplicationHandler" >
 <lst name="slave">
   <str name="masterUrl">http://127.0.0.1/core0/replication</str>
   <str name="pollInterval">00:00:60</str>
   <str name="compression">internal</str>  
   <str name="httpConnTimeout">50000</str>     
   <str name="httpReadTimeout">500000</str>
 </lst>
</requestHandler>
java -cp server/lib/jetty-util-9.3.14.v20161028.jar org.eclipse.jetty.util.security.Password admin admin
admin
OBF:1u2a1toa1w8v1tok1u30
MD5:21232f297a57a5a743894a0e4a801fc3
CRYPT:adpexzg3FUZAk
  • 在/server/contexts/solr-jetty-context.xml中添加内容(示例文件)
<Get name="securityHandler">  
 <Set name="loginService">  
   <New class="org.eclipse.jetty.security.HashLoginService">  
    <Set name="name">Test Reaml</Set>  
    <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>  
   </New>  
 </Set>  
</Get>
  • 在server/solr-webapp/webapp/WEB-INF/web.xml中添加如下内容(示例文件)
<security-constraint>
    <web-resource-collection>
      <web-resource-name>solr</web-resource-name>
      <url-pattern>/</url-pattern>
    </web-resource-collection>
    <auth-constraint> 
        <role-name>solr_home</role-name>  
        <role-name>admin</role-name>  
    </auth-constraint>
  </security-constraint>
  <login-config>  
      <auth-method>BASIC</auth-method>  
      <realm-name>Solr</realm-name>  
  </login-config>  
  • 清空数据
* 在solr客户端访问你的索引库我认为最方便的方法
* documents type 选择 XML 
* documents 输入下面语句
<delete><query>*:*</query></delete>
<commit/>
  • 更新URL地址
curl -u admin:admin "http://127.0.0.1:8983/solr/xxx/dataimport?command=delta-import&wt=json&clean=false&commit=true"

FAQ

  • 随机数不够用
 * watch cat /proc/sys/kernel/random/entropy_avail
 * yum install rng-tools
 * systemctl enable rngd.service
 * systemctl start rngd.service