solr
Author : Janloong Do_O
版本 : solr 7.0.0 +
常規安裝部署
目錄結構
目錄 | 文件 | 描述 |
---|---|---|
bin | 腳本命令目錄 | |
solr and solr.cmd | 啓動腳本 | |
solr.in.sh and solr.in.cmd | 啓動參數配置文件 | |
install_solr_services.sh | 設置服務腳本 | |
contrib | 擴展插件 | |
dist | solr依賴的jar | |
docs | 文檔 | |
example | 各種example | |
exampledocs | ||
example-DIH | ||
files | ||
films | ||
server | solr核心應用 | |
server/solr-webapp | admin ui頁面 | |
server/lib | server應用的lib依賴 | |
server/solr | solr主應用 |
配置
solr.in.sh配置java環境變量
啓動
./bin/solr start
./bin/solr start -force
訪問
端口8983
結合tomcat
配置
1. 解壓solr7.0.tgz 文件到 /usr/local 重命名爲solr7
2. 拷貝solr7\server\solr-webapp\webapp文件夾至%TOMCAT_HOME%\webapps\下
並重命名webapp爲solr
3. 將solr7\server\lib\ext下的所有jar包,以及solr7\server\lib下以metrics開頭的jar、
gmetric4j-1.0.7.jar複製到apache-tomcat-8.5.15\webapps\solr\WEB-INF\lib下
4. 在%TOMCAT_HOME%\webapps\webapp\WEB-INF中,新建classes文件夾,
將solr7\server\resources下的log4j.properties文件拷貝到裏面
5. 修改tomcat腳本catalina.bat,增加solr.log.dir系統變量,指定solr日誌記錄存放地址
注:如果不處理此步,日誌將不能正常打印。log4j.properties中有依賴此變量
233行左右
set "JAVA_OPTS=%JAVA_OPTS% -Dsolr.log.dir=[目錄]"
上述寫法有問題
暫爲:
JAVA_OPTS="$JAVA_OPTS -Dsolr.log.dir=[path]"
6. 創建SOLR HOME目錄(/usr/local/solr_tomcat)> %SOLR_HOME%
7. 拷貝solr7\server\solr\下所有文件、文件夾至%SOLR_HOME%目錄下
8. 配合solr日誌記錄存放地址,在%SOLR_HOME%下新建logs文件夾
9. 拷貝solr7 下contrib和dist文件夾至%SOLR_HOME%目錄下
10. 在%SOLR_HOME%目錄下新建new_core文件夾;
並拷貝solr7\server\solr\configsets\_default\目錄下conf文件夾至%SOLR_HOME%\new_core下
11. 修改%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" />
12. 修改%TOMCAT_HOME%\webapps\solr\WEB-INF中的web.xml文件
新增部分
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr_tomcat</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>
核心實例目錄
instanceDir
對應%SOLR_HOME%\new_core
dataDir
對應%SOLR_HOME%\new_core\data
config
對應%SOLR_HOME%\new_core\conf\solrconfig.xml
schema
對應%SOLR_HOME%\new_core\conf\managed-schema
solr 應用
數據源導入
core實例
在solr的工作目錄中選擇一個core,我這裏選擇core1。進入配置文件夾:solr_tomcat\solr\core1\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>
data-config.xml 配置文件
<?xml version="1.0" encoding="utf-8"?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.10:3306/bingdg_1"
user="root"
password="root"/>
<document name="djl">
<entity name="items" pk="item_id" query="select item_id,,item_name,,item_code,merchant_custome_cid,total_stock,item_ad from items">
<field column="item_id" name="item_id" />
<field column="item_name" name="item_name" />
<field column="item_code" name="item_code" />
<field column="merchant_custome_cid" name="merchant_custome_cid" />
<field column="total_stock" name="total_stock" />
<field column="item_ad" name="item_ad" />
</entity>
</document>
</dataConfig>
manage-schema.xml
<field name="item_id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="item_name" type="string" indexed="true" stored="true" multiValued="false" />
<field name="item_code" type="string" indexed="true" stored="true" multiValued="false" />
<field name="merchant_custome_cid" type="string" indexed="true" stored="true" multiValued="false" />
<field name="total_stock" type="int" indexed="true" stored="true" multiValued="false" />
<field name="item_ad" type="text_ik" indexed="true" stored="true" multiValued="false" />
基礎用法
查詢
q | 查詢的關鍵字,此參數最爲重要,例如,q=id:1,默認爲q=:, |
---|---|
fl | 指定返回哪些字段,用逗號或空格分隔,注意:字段區分大小寫,例如,fl= id,title,sort |
start | 返回結果的第幾條記錄開始,一般分頁用,默認0開始 |
rows | 指定返回結果最多有多少條記錄,默認值爲 10,配合start實現分頁 |
sort | 排序方式,例如id desc 表示按照 “id” 降序 |
wt | (writer type)指定輸出格式,有 xml, json, php等 |
fq | (filter query)過慮查詢,提供一個可選的篩選器查詢。返回在q查詢符合結果中同時符合的fq條件的查詢結果,例如:q=id:1&fq=sort:[1 TO 5],找關鍵字id爲1 的,並且sort是1到5之間的。 |
df | 默認的查詢字段,一般默認指定。 |
qt | (query type)指定那個類型來處理查詢請求,一般不用指定,默認是standard。 |
indent | 返回的結果是否縮進,默認關閉,用 indent=true |
version | 查詢語法的版本,建議不使用它,由服務器指定默認值。 |
檢索運算符
“:” | 指定字段查指定值,如返回所有值: |
---|---|
“?” | 表示單個任意字符的通配 |
* | 表示多個任意字符的通配(不能在檢索的項開始使用*或者?符號) |
“~” | 表示模糊檢索,如檢索拼寫類似於”roam”的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。 |
AND、|| | 布爾操作符 |
OR、&& | 布爾操作符 |
NOT、!、- | 排除操作符不能單獨與項使用構成查詢) |
“+” | 存在操作符,要求符號”+”後的項必須在文檔相應的域中存在² |
( ) | 用於構成子查詢 |
[] | 包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[201507 TO 201510] |
{} | 不包含範圍檢索,如檢索某時間段記錄,不包含頭尾date:{201507 TO 201510} |
高亮
h1 | 是否高亮,hl=true,表示採用高亮 |
---|---|
hl.fl | 設定高亮顯示的字段,用空格或逗號隔開的字段列表。要啓用某個字段的highlight功能,就得保證該字段在schema中是stored。如果該參數未被給出,那麼就會高亮默認字段 standard handler會用df參數,dismax字段用qf參數。你可以使用星號去方便的高亮所有字段。如果你使用了通配符,那麼要考慮啓用hl.requiredFieldMatch選項。 |
hl.requireFieldMatch | 如果置爲true,除非用hl.fl指定了該字段,查詢結果纔會被高亮。它的默認值是false。 |
hl.usePhraseHighlighter | 如果一個查詢中含有短語(引號框起來的)那麼會保證一定要完全匹配短語的纔會被高亮。 |
hl.highlightMultiTerm | 如果使用通配符和模糊搜索,那麼會確保與通配符匹配的term會高亮。默認爲false,同時hl.usePhraseHighlighter要爲true。 |
hl.fragsize | 返回的最大字符數。默認是100.如果爲0,那麼該字段不會被fragmented且整個字段的值會被返回。 |
分組
官方wiki:http://wiki.apache.org/solr/SimpleFacetParameters#Facet_Fields_and_Facet_Queries,
這是facet的官方wiki,裏面有facet各個參數的詳細說明。所以這裏只說一些常用的。
Facet是Solr的核心搜索功能,主要是導航(Guided Navigation)、參數化查詢(Paramatic Search)。Facet的主要好處是在搜索的同時,可以按照Facet條件進行分組統計,給出導航信息,改善搜索體驗。
Field Facet
參數 | 描述 |
---|---|
facet | 參數字段必須被索引 |
facet=on 或 facet=true | |
facet.field | 分組的字段 |
facet.prefix | 表示Facet字段前綴 |
facet.limit | Facet字段返回條數 |
facet.offict | 開始條數,偏移量,它與facet.limit配合使用可以達到分頁的效果 |
facet.mincount | Facet字段最小count,默認爲0 |
facet.missing | 如果爲on或true,那麼將統計那些Facet字段值爲null的記錄 |
facet.sort | 表示 Facet 字段值以哪種順序返回 .格式爲 true(count) |
Date Facet
對日期類型的字段進行 Facet. Solr 爲日期字段提供了更爲方便的查詢統計方式 .注意 , Date Facet的字段類型必須是 DateField( 或其子類型 ). 需要注意的是 , 使用 Date Facet 時 , 字段名 , 起始時間 , 結束時間 , 時間間隔這 4 個參數都必須提供 .
facet.date 該參數表示需要進行 Date Facet 的字段名 , 與 facet.field 一樣 , 該參數可以被設置多次 , 表示對多個字段進行 Date Facet.
facet.date.start 起始時間 , 時間的一般格式爲 ” 2015-12-31T23:59:59Z”, 另外可以使用 ”NOW”,”YEAR”,”MONTH” 等等 ,
facet.date.end 結束時間
facet.date.gap 時間間隔,如果 start 爲 2015-1-1,end 爲 2016-1-1,gap 設置爲 ”+1MONTH” 表示間隔1 個月 , 那麼將會把這段時間劃分爲 12 個間隔段 .
facet.date.hardend 表示 gap 迭代到 end 時,還剩餘的一部分時間段,是否繼續去下一個間隔. 取值可以爲 true|false, 默認爲 false.
例 start 爲 2015-1-1,end 爲 2015-12-21,gap 爲 ”+1MONTH”, 如果hardend 爲 false,則,最後一個時間段爲 2015-12-1 至 2016-1-1; 反之,如果 hardend 爲 true,則,最後一個時間段爲 2015-12-1 至 2015-12-21.
資料參考