1. 程式人生 > >Solr7.1搭建與整合(windows)

Solr7.1搭建與整合(windows)

-版本solr-7.1.0

-環境 Windows  jdk1.8

-框架 SSM

-啟動方式:部署在apache-tomcat-8.5.23,以下簡稱Tomcat 

1. 將solr-7.1.0\server\solr-webapp下的webapp複製到Tomcat\webapps下,並改名solr

2. 將solr-7.1.0\server\lib下的ext下的所有jar包複製到Tomcat\webapps\solr\WEB-INF\lib下,以及

    solr-7.1.0\server\lib下以metrics開頭的jar、gmetric4j-1.0.7.jar複製到Tomcat

\webapps\solr\WEB-INF\lib下;

3. 在Tomcat\webapps\solr\WEB-INF下建立classes資料夾,並把solr-7.1.0\server\resources下的log4.perportiy複製到 classes檔案下;

4. 修改修改Tomcat\bin下的catalina.bat,增加solr.log.dir系統變數,指定solr日誌記錄存放地址。

if not "%JSSE_OPTS%" == "" goto gotJsseOpts
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%" --增加下一行
set "JAVA_OPTS=%JAVA_OPTS% -Dsolr.log.dir=D:\Solr-7\solr_home\logs"

5. 在任意地方建立資料夾solr_home,把solr-7.1.0\server下solr下的所有檔案複製到這個solr_home下,在這裡,我建立在Solr-7.1.0的同級目錄下了,並且修改配置檔案Tomcat\webapps\solr\WEB-INF\web.xml,將下面配置的註釋放開,黑體部分更改為你的solr-home地址。

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>D:\Solr-7\solr_home</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>
並註釋下面部分:
  <!-- Get rid of error message 
  <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>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Enable everything but TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method-omission>TRACE</http-method-omission>
    </web-resource-collection>
  </security-constraint>
-->

6. 配合solr日誌記錄存放地址,solr-home下新建logs資料夾,此處與配置4位置配置路徑一致; 
7. 拷貝solr-7.1.0下contrib和dist資料夾至solr-home目錄下。 
8. 在solr-home目錄下新建new_core資料夾;並拷貝solr-7.1.0\server\solr\configsets_default\目錄下conf資料夾至solr-home\new_core下。 
9. 修改solr-home\new_core\conf\solrconfig.xml檔案,如下

<!--
  <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
  -->
	<lib dir="${solr.install.dir:../}/contrib/extraction/lib" regex=".*\.jar" />
	<lib dir="${solr.install.dir:../}/dist/" regex="solr-cell-\d.*\.jar" />

	<lib dir="${solr.install.dir:../}/contrib/clustering/lib/" regex=".*\.jar" />
	<lib dir="${solr.install.dir:../}/dist/" regex="solr-clustering-\d.*\.jar" />

	<lib dir="${solr.install.dir:../}/contrib/langid/lib/" regex=".*\.jar" />
	<lib dir="${solr.install.dir:../}/dist/" regex="solr-langid-\d.*\.jar" />

	<lib dir="${solr.install.dir:../}/contrib/velocity/lib" regex=".*\.jar" />
	<lib dir="${solr.install.dir:../}/dist/" regex="solr-velocity-\d.*\.jar" />
	<lib dir="${solr.install.dir:../}/dist/" regex="ojdbc\d.*\.jar" />
	<lib dir="${solr.install.dir:../}/dist/" regex="solr-dataimporthandler\d.*\.jar" />

11. 配置Ik分詞器,首先匯入ik的jar  ik-analyzer-solr5-5.x 和 solr-analyzer-ik-5.1.0 兩個jar包

匯入Tomcat\webapps\solr\WEB-INF\lib下

 然後配置solr_home\new_core\conf下的managed-schema檔案加入

   <fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">    
     <analyzer type="index">  --此處為建立索引分詞  
         <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"  useSmart="false"/>    
         <filter class="solr.LowerCaseFilterFactory"/>    
     </analyzer>    
     <analyzer type="query"> -- 此處為查詢分詞索引
         <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"  useSmart="true"/>         
         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>    
         <filter class="solr.LowerCaseFilterFactory"/>    
     </analyzer>    
  </fieldType>
<field name="查詢欄位" type="text_ik" indexed="true" stored="true"/>
<field name="productName" type="text_ik" indexed="true" stored="true"/>

到此IK分詞設定完成。

12. Solr與Spring整合

建立spring-context-solr.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
		http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-4.1.xsd"
	default-lazy-init="true">

	<!--定義solr的server-->
	<bean id="httpSolrClient" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
		<constructor-arg value="http://location/solr/new_core"/>
	</bean>
</beans>

13. 建立測試類SorlJTest

@ContextConfiguration(locations = { "classpath*:/spring-context*.xml" })
    public class SolrJTest extends AbstractTransactionalJUnit4SpringContextTests {
    private static final Log log = LogFactory.getLog(SolrJTest.class);

    @Autowired
    private HttpSolrClient client;
 
    @Test
    public void test() throws IOException, SolrServerException {
        SolrQuery solr = new SolrQuery();
        solr.setQuery("productName:蘋果");
        QueryResponse queryResponse =client.query(solr);
        //拿到資料集合,返回查詢結果
        List<SolrDocument> list =queryResponse.getResults();
        System.out.println(list);
    }
}

14.有關IK分詞,粗細力度查詢

上面11中

useSmart="false" 為智慧分詞  false 關閉狀態 預設最細力度分詞
useSmart="true"  為智慧分詞  true  開啟狀態 預設最粗力度分詞
智慧分詞的開關,根據自身業務的需求來進行設定,此處設定粗粒度查詢 匹配度最高在第一位

15. 配置檔案-自動匯入資料庫資料

solr_home\new_core\conf下新建data-config.xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
	<dataSource 
		type="JdbcDataSource"
		driver="oracle.jdbc.driver.OracleDriver"
		url="jdbc:oracle:thin:@192.168.00.000:1521:XXXX"
		user="XXXXXX"
		password="XXXXXXX"/>
	<document>
<entity name="XXXXXX" pk="USERID"
			query="select
			NMSKY,
			NMSKY,
			USER_ID,
			USERNAM,
			USERRAT
			from XXXXXX" 
			deltaQuery="select USER_ID as USERID from XXXXXX where to_char(TIME,'YYYY-MM-DD HH24:MI:SS') > '${dih.last_index_time}'" 
			deltaImportQuery="select NMSKY,NMSKY,USER_ID,USERNAM,USERRAT from XXXXXX where USER_ID='${dih.delta.USERID}'">    
		</entity>
</document>
</dataConfig>

基本的配置就是這樣了,如果有不對的地方請指教!