Solr 6.0 學習(二)建立core並插入索引
修改各種配置檔案。
1、修改solrhome下的solr.xml檔案
註解掉zookeeper搭建叢集配置,我們後面會採用master-slave的形式。
至於zookeeper的形式可以閱讀以下這篇文章【solrCloud叢集配置指導】:http://www.aboutyun.com/thread-9432-1-1.html
<!-- 結合zookeeper配置solrColound start --> <!-- 採用master-slave的方式 <solrcloud> <str name="host">${host:}</str> <int name="hostPort">${jetty.port:8983}</int> <str name="hostContext">${hostContext:solr}</str> <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool> <int name="zkClientTimeout">${zkClientTimeout:30000}</int> <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int> <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int> </solrcloud> <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory"> <int name="socketTimeout">${socketTimeout:600000}</int> <int name="connTimeout">${connTimeout:60000}</int> </shardHandlerFactory> -->
<!-- 結合zookeeper配置solrColound end -->
2、在sorlhome資料夾下建立【my_solr】資料夾。
3、在【my_solr】資料夾中新增core.properties配置,內容如下:
name=my_solr
這個name的值實際上就core的名稱,可以任意命名,為了保證統一和方便閱讀,個人覺得最好和資料夾名稱一致。
4、將【solr-6.0.0\example\example-DIH\solr\solr】下的conf資料夾拷貝到【my_solr】資料夾下。包含如下檔案:
【conf】中檔案目錄如下:
5、solr-5.0 以上預設對schema的管理是使用managed-schema,不能手動修改,需要使用Schema Restful的API操作。
如果要想手動修改配置,把【conf】資料夾中managed-schema拷貝一份修改為schema.xml,在solrconfig.xml中修改如下:
<codecFactory class="solr.SchemaCodecFactory"/>
<!-- 解除managed-schema管理模式 start -->
<schemaFactory class="ClassicIndexSchemaFactory"/>
<!-- 解除managed-schema管理模式 end -->
重啟tomcat8,可能會報錯,檢視tomcat日誌發現,比喻:
缺少DataImportHandler的jar等,那麼將【solr-6.0.0\dist】下的
solr-dataimporthandler-6.0.0.jar和solr-dataimporthandler-extras-6.0.0.jar
拷貝到【apache-tomcat-8.0.33\webapps\solr\WEB-INF\lib】下。
重啟tomcat8。如果缺少其他jar包,根據報錯資訊新增即可。沒有異常,
訪問:【http://localhost:8080/solr/index.html#/】
會出現如下介面:
選擇my_solr,會出現如下介面:
至此其實由於沒有索引資料,其實solr是個空殼,那麼下面寫一個應用程式插入solr索引資料。
參考:http://www.open-open.com/lib/view/open1452062296995.html
1、首先需要修改schema.xml檔案,新增
<field name="content_test" type="text_general" indexed="true" stored="true" multiValued="true"/>
field的屬性和配置,可以google一下schema.xml 說明很多,用法也很多,這裡就不贅述。
2、新增索引資料,程式碼如下:
編寫過程中可能會報錯,最簡便的方法是將web-inf下lib裡所有jar包新增進來,然後執行,出什麼錯,就新增什麼jar包即可。
package com.solr.insertData;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
public class InsertProgarm {
//solr 伺服器地址
public static final String solrServerUrl = "http://localhost:8080/solr";
//solrhome下的core
public static final String solrCroeHome = "my_solr";
//待索引、查詢欄位
public static String[] docs = {"Solr是一個獨立的企業級搜尋應用伺服器",
"它對外提供類似於Web-service的API介面",
"使用者可以通過http請求",
"向搜尋引擎伺服器提交一定格式的XML檔案生成索引",
"也可以通過Http Get操作提出查詢請求",
"並得到XML格式的返回結果"};
public static void main(String[] args) {
SolrClient client = getSolrClient();
int i=0;
List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>();
for (String content : docs) {
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", i++);
doc.addField("content_test", content);
solrDocs.add(doc);
}
try {
client.add(solrDocs);
client.commit();
} catch (SolrServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SolrClient getSolrClient(){
return new HttpSolrClient(solrServerUrl+"/"+solrCroeHome);
}
}
3、執行成功後,會在【solrhome/my_solr】資料夾下建立一個【data】的資料夾,這個資料夾中的內容就是我們的solr索引。
其實其對於的是solconfig.xml中如下配置:
<!-- Data Directory
Used to specify an alternate directory to hold all index data
other than the default ./data under the Solr home. If
replication is in use, this should match the replication
configuration.
-->
<dataDir>${solr.data.dir:}</dataDir>
4、訪問http://localhost:8080/solr/index.html選擇【my_solr】core,選擇query得到如下介面:
紅色區域是針對不同的ui,因為瀏覽器版本問題,我這裡面選擇使用【Use original UI】,會跳轉到http://localhost:8080/solr/old.html#/
選擇【my_solr】core,選擇query,點選【Execute Query】查詢結果如下:
其實其訪問的url實際為:http://localhost:8080/solr/my_solr/select?q=*%3A*&wt=json&indent=true
至於q、wt、indent等引數,代表的含義,可以搜尋solr查詢語法。
那麼至此,我們就將solr外掛完畢,結合了core和建立索引、查詢程式,完成!