簡介: solr5.0是一個獨立的應用程序,再也不依賴其餘Web服務器就能提供Web服務(這是和4.x版本最大的差別,內置jetty)。html
下載:http://lucene.apache.org/solr/java
安裝solrmysql
下載壓縮包解壓便可!web
目錄說明sql
dist 各類jar包apache
contrib 各類jar包json
bin 經常使用命令腳本segmentfault
server web服務器api
solr 將來建立的core會在該目錄下服務器
configsets solr配置集,新建的core能夠從這裏拷貝配置
xx-core
conf 配置文件
solrconfig.xml solr的配置信息
schema.xml 分詞器配置信息
data 索引等數據
logs 日誌文件
webapps web程序部署位置
example
example-DIH 數據導入工具
licenses 各類受權協議
docs api文檔
啓動solr
solr提供了啓動腳本
bin/solr start 前臺運行 bin/solr start -f 指定端口號 bin/solr start -p 8984(默認端口號8983) 查看solr狀態 bin/solr status 結束solr bin/solr stop -p 8984
後臺管理地址 http://localhost:8984/solr
logging:顯示日誌
Core Admin: core就是搜索示例,放置索引。
java properties:查看java配置信息
Thread dump:查看線程信息
建立一個搜索實例
{solr安裝路徑}/server/solr/新建一個文件夾命名爲test
拷貝{solr安裝路徑}/server/solr/configsets/sample_techproducts_configs到test目錄下
目錄結構以下:
在後臺採用以下配置:
配置smartcn分詞期
第一步:導入smartcn的jar包
在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex=".*smartcn.*\.jar"></lib>
第二步:配置分詞器
1.solr5在{solr安裝路徑}/server/solr/test/conf/schema.xml加入以下代碼
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/> </analyzer> </fieldType>2.solr6
在{solr安裝路徑}/server/solr/test/conf/managed-schema加入以下代碼
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="false" words="stopwords.txt" /> </analyzer> </fieldType>
第三步:檢查是否正確配置
若是能夠搜索到text_cn即表示配置成功,最好用一段文字測試下分詞結果。
配置數據導入handler(用於數據導入,生成索引)
第一步:導入相關jar包(solr6不須要這一步)
在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
第二步:配置handler(solr6不須要這一步)
在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼
<requestHandler name="/dataimport" class="solr.DataImportHandler"> <lst name="defaults"> <str name="config">db-data-config.xml</str> </lst> </requestHandler>
第三步:配置數據源,源數據與索引的隱射關係
在{solr安裝路徑}/server/solr/test/conf/下新建db-data-config.xml,配置以下:
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/> <document name="articles"> <entity name="cms_article" query="select id,title,content,create_time from cms_article"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="content" name="content" /> <field column="create_time" name="create_time" /> </entity> </document> </dataConfig>
第四步:驗證配置是否成功
在後臺core admin中reload當前搜索實例的配置
then在搜索實例的dataimport出現下圖情形即爲成功
導入數據
第一步:導入mysql的jar包 下載地址:見參考資料5
將jar放置到{solr安裝路徑}/dist目錄下,
在{solr安裝路徑}/server/solr/test/conf/solrconfig.xml加入以下代碼
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql.*\.jar" />
第二步:驗證配置(配置見第六點)
若是顯示indexing completed. Added/Updated: 1847 documents. Deleted 0 documents
documents的個數大於0說明咱們成功導入x條數據到solr中
設置field的索引方式
查詢
更新索引
刪除索引
優化
定時完整數據從新導入
crontab -e curl -d "command=full-import&clean=true&commit=true&optimize=true&wt=json&indent=true&verbose=false&debug=false" "http://ip:port/solr/{core名稱}/dataimport"
14.增量導入數據配置
修改db-data-config.xml添加deltaQuery、deltaImportQuery、pk三個屬性
1.pk設置主鍵字段名稱,該字段必須在managed-schema配置過<uniqueKey>字段名</uniqueKey>
2.deltaQuery該屬性用於查詢主鍵字段值
3.deltaImportQuery該屬性用於查詢須要被索引的全部字段的sql
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/> <document name="articles"> <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="content" name="content" /> <field column="create_time" name="create_time" /> </entity> </document> </dataConfig>
15.配置定時數據更新
16.搜索詞建議
https://cwiki.apache.org/confluence/display/solr/Suggester
更新中~~~
錯誤信息:
1.配置好的solr沒有任何數據,啓動時報錯:SolrException: Invalid Number: MA147LL/A
這不是你的錯,你多是把solr schema.xml的id設置成了int類型,設置成int類型沒什麼錯,可是solr啓動是會掃描conf目錄下的elevate.xml文件,這個文件中定義的id值是MA147LL/A
因此就會出現異常SolrException: Invalid Number: MA147LL/A
解決問題的方法是修改elevate.xml文件,將其中的id值設置爲數字,就能夠了。
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/> <document name="articles"> <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="content" name="content" /> <field column="create_time" name="create_time" /> </entity> </document> </dataConfig>
2.全量導入數據報:
Caused by: java.sql.SQLException: Illegal value for setFetchSize().
在db-data-config.xml的dataSource標籤添加batchSize屬性並賦值-1便可,修改後的內容
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1" batchSize="-1"/> <document name="articles"> <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="content" name="content" /> <field column="create_time" name="create_time" /> </entity> </document> </dataConfig>
參考資料:
1.官網參考文檔 http://apache.fayea.com/lucene/solr/ref-guide/apache-solr-ref-guide-5.0.pdf
2.官網wiki之DataImportHandler https://wiki.apache.org/solr/DataImportHandler
3.solr教程,值得剛接觸搜索開發人員一看 http://blog.csdn.net/awj3584/article/details/16963525
4.Ajita博客 http://ajita.iteye.com/blog/1995140
5.CSDN MYSQL JAR包下載:http://download.csdn.net/download/nsrainbow/8196897
6.Apache Solr查詢語法 http://blog.javachen.com/2014/03/03/solr-query-syntax/
7.solr 的edismax與dismax比較與分析 http://blog.csdn.net/duck_genuine/article/details/8060026
8.solr搜索打分規制排序http://lavafree.iteye.com/blog/1685766
9.Lucene Scoring 評分機制 http://blog.chenlb.com/2009/08/lucene-scoring-architecture.html
10.解決Solr重建索引時沒有索引部分表的數據問題 http://www.jianshu.com/p/fd857c02effc
11.solrconfig.xml 應用解析調優 https://segmentfault.com/a/1190000002582878