1.下載solr-4.7.1java
http://www.apache.org/dyn/closer.cgi/lucene/solr/4.7.1node
環境需求:java 1.6版本以上;solr運行須要java serverlet 容器,默認使用jetty,或者tomcat,jboss等等。mysql
2.Tomcat部署solr:web
1. 安裝好jdk 1.6以上(我用是jdk 1.7.0_15),安裝好tomcat(我用是apache-tomcat-7.0.6),並配置環境變量。算法
2. 將解壓包中的solr-4.7.1/dist/solr-4.7.1.war複製到tomcat_dir/webapps/目錄,並命名爲solr.war。sql
3. 將solr-4.7.1/example/lib/ext/目錄下的jar文件複製到tomcat/lib目錄下,將solr-4.7.1/example/resources/下的log4j.properties文件複製到tomcat_dir/lib目錄下;數據庫
切把 solr-4.7.1/example/solr,複製到tomcat_dir/bin下。apache
4.修改tomcat_dir/conf/server.xml瀏覽器
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
5.建立solr.xml,存放在路徑:tomcat/conf/Catalina/localhost/solr.xml,內容:tomcat
<Context path="/solr" docBase="F:\Tomcat 7.0\webapps\solr.war" debug="0" crossContext="true"> <Environment name="solr/home" type="java.lang.String" value="FF:\Tomcat 7.0\bin\solr\" override="true" /> </Context>
注意:上面的docBase和value路徑中不能存在中文字符,不然會出現404錯誤。
此時若安裝及配置都正確,在瀏覽器中輸入:http://127.0.0.1:9000/solr/,會出現Solr的管理界面:
6.將F:\Tomcat 7.0\webapps下的solr.war包,啓動項目解壓;而後再添加幾個jar包:
solr-4.7.1\dist\solr-dataimporthandler-4.7.1.jar;
solr-4.7.1\dist\solr-dataimporthandler-extras-4.7.1.jar;
還要加載數據庫驅動包:mysql-connector-java-3.1.13-bin.jar
七、在F:\Tomcat 7.0\bin\solr\collection1\conf 下的solrconfig.xml增長如下數據庫配置:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
8.將tomcat\bin\solr\collection1\conf下增長data-config.xml文件,內容以下:
<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.221:3306/tmsdb" user="root" password="123456"/> <document name="content"> <entity name="node" query="select id,author,title,content from solrdb"> <field column="id" name="id" /> <field column="author" name="author" /> <field column="title" name="title" /> <field column="content" name="content" /> </entity> </document> </dataConfig>
9.增長中文分詞器,ik-analyzer的配置以下:
①目前的中文分詞主要有兩種
1,基於中科院ICTCLAS的隱式馬爾科夫hhmm算法的中文分詞器,例如smartcn等。(不支持自定義擴展詞庫)
2,基於正向迭代最細粒度切分算法(正向最大匹配而且最細分詞)例如IK,庖丁等(支持自定義擴展詞庫)
安裝分詞前,能夠去下載IK的分詞包 :
IK-Analyzer-4.7.1-0.0.1-SNAPSHOT.jar
下載完畢後,將此包放進tomcat\solr的\WEB-INF\lib下面:tomcat\webapps\solr\WEB-INF\lib 。
下面須要在solr的schemal.xml進行分詞器註冊:
<!-- 配置IK分詞器 --> <fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <!-- 分詞--> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> <!-- 禁用詞過濾根據狀況使用--> <!-- <filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/> --> </analyzer> <analyzer type="query"> <!-- 分詞--> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> <!-- 禁用詞過濾根據狀況使用--> <!-- <filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/>--> </analyzer> </fieldType>
最後還得配置一個引用字段就OK了
<field name="ik" type="text_ik" indexed="true" stored="true" multiValued="true"/>
②它的安裝部署十分簡單,將IKAnalyzer2012.jar部署亍項目的lib目錄中;IKAnalyzer.cfg.xml不stopword.dic文件放置在class根目錄(對於web項目,一般是WEB-I NF/classes目彔,同hibernate、log4j等配置文件相同)下便可 ;而後配置solr4.7中schema.xml配置解析器:
<schema name="example" version="1.1"> …… <fieldType name="text" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> …… </schema>
10. solr schema.xml配置總結:
schema.xml 在solr/conf/目錄下,相似於數據表配置文件。
爲了改進性能,能夠採起如下幾種措施:
①. 將全部只用於搜索的,而不須要做爲查詢結果的field(特別是一些比較大的field)的stored設置爲false。
②. 將不須要被用於搜索的,而只是做爲查詢結果返回的field的indexed設置爲false。
③. 刪除全部沒必要要的copyField聲明,根據須要決定是否進行存儲。
④. 爲了索引字段的最小化和搜索的效率,將全部的 text fields的index都設置成false,而後使用copyField將他們都複製到一個總的 text field上,而後對他進行搜索。
⑤. 使用盡量高的Log輸出等級,減小日誌量。能夠在solr/admin 中的 LOGGING 進行設置。
特珠說明:
1. 高亮是基於分詞的,全部存儲須要高亮顯示的字段 必定要分詞(text)才能高亮顯示。
2. 排序字段 是不能當 查詢過濾的條件。
文本主要配置項:
①. field 類型定義
重點是中文分詞的添加
②. field 各屬性定義
name type類型 indexed是否創建索引 stored是否存儲 required 是否必填項 multiValued多值存儲
③. 惟一key
<uniqueKey>id</uniqueKey>
文檔的惟一標識, 必須填寫這個field(除非該field被標記required="false"),不然solr創建索引報錯。
④. 默認搜索字段 field
<defaultSearchField>text</defaultSearchField>
若是搜索參數中沒有指定具體的field,那麼這個作爲默認的域。
⑤. 搜索參數短語間邏輯
<solrQueryParser defaultOperator="OR"/>
配置搜索參數短語間的邏輯,能夠是"AND|OR"。
備註: AND是交集,OR是並集
⑥. 複製字段
<copyField source="content" dest="text"/>
將多個字段的值 複製至 一個字段中,若是被複制的字段都設置爲stored,那個這個字段務必不要設置成stored=true
⑦. 自定義評分器
<similarity class="......SolrSimilarity"/>
SolrSimilarity 是繼承 DefaultSimilarity的子類,或者實現評分器接口的類。
解析:multiValued:是否包含多個值,若是要使用後面的copyField將其餘字段放入默認搜索中就必須容許多指,不然會報:multiple values encountered for non multiValued copy field content。
defaultSearchField配置默認搜索索引,copyField能夠將 title、author字段添加至content默認搜索中
<uniqueKey>id</uniqueKey> <defaultSearchField>content</defaultSearchField> <solrQueryParser defaultOperator="OR"/> <copyField source="title" dest="content"/> <copyField source="author" dest="content"/>