1 啓動solr
a.linux或者windows解壓solr
b.啓動命令:
自定義solr項目:java-Dsolr.solr.home=test-core-jar start.jar
用默認搜索項目:java-jar start.jar
2 建立數據項目
a.在example目錄下創建test-core文件夾;
b.將/solr下的solr.xml拷貝到test-core目錄下;
c.在test-core下創建test目錄,並且在test目錄下創建conf和data目錄;
d.將example\solr\collection1\core.properties文件拷貝到test目錄,修改name=test;
e.將example\solr\collection1\conf下的schema.xml、solrconfig.xml拷貝到example\test-core\test\conf下;
f.配置schema.xml文件:
<?xml version="1.0" encoding="UTF-8" ?> <schema name="example" version="1.7"> <field name="_version_" type="long" indexed="true" stored="true"/> <field name="_root_" type="string" indexed="true" stored="false"/> <field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
<!—複製域,不同字段檢索結果取並集,檢索複製域相當於檢索所有複製域字段--> <field name="copy_item" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" /> <copyField source="title1" dest="copy_item"/> <copyField source="title2" dest="copy_item"/>
<!—主鍵域--> <uniqueKey>id</uniqueKey>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldtype name="binary" class="solr.BinaryField"/> <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> </schema> |
g 修改solrconfig.xml
3 配置分詞和其他
a.將IKAnalyzer-2012-4x.jar拷貝到example\solr-webapp\webapp\WEB-INF\lib下;
b.在schema.xml文件中添加fieldType:
IKAnalyzer-2012-4x.jar
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> |
c.重啓solr,用analysis做分詞測試
4 導入數據到solr
a.配置solr搜索項目的集合字段
b.調用solr服務,導入數據
@Before public void setUp() throws Exception { // 在url中指定索索項目名稱 String url = "http://localhost:8983/solr/test"; HttpSolrServer httpSolrServer = new HttpSolrServer(url); // 定義solr的server httpSolrServer.setParser(new XMLResponseParser()); // 設置響應解析器 httpSolrServer.setMaxRetries(1); // 設置重試次數,推薦設置爲1 httpSolrServer.setConnectionTimeout(500); // 建立連接的最長時間
this.httpSolrServer = httpSolrServer; }
@Test public void testImport() throws Exception { // 查詢商品數據 String url = ""; String jsonData = doGet(url); List<OBJECT_T_MALL_SKU> json_to_list = MyJsonUtil.json_to_list(jsonData, new OBJECT_T_MALL_SKU()); this.httpSolrServer.deleteByQuery("*:*"); this.httpSolrServer.addBeans(json_to_list); this.httpSolrServer.commit(); }
|
c.刪除solr數據,
<delete><query>*:*</query></delete>
this.httpSolrServer.deleteByQuery("*:*");
5 搜索項目工程
a.新建mvc項目
b.配置pom和spring容器中的solr客戶端服務
<bean id ="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer"> <constructor-arg index="0" value="${url}" /> <property name="parser"> <bean class="org.apache.solr.client.solrj.impl.XMLResponseParser" /> </property> <property name="maxRetries" value="1" /> <property name="connectionTimeout" value="${connectionTimeout}"/> </bean> |
c.新建controller,返回爲值可設置爲jsp或者json均可
d.通過HttpSolrServer對solr服務進行檢索,並處理檢索結果
SolrQuery sq = new SolrQuery(); sq.setQuery("sku_mch:聯想高配高端"); QueryResponse query = null; try { query = solrServer.query(sq); } catch (SolrServerException e) { e.printStackTrace(); } List<OBJECT_T_MALL_SKU> beans = query.getBeans(OBJECT_T_MALL_SKU.class); |
e.配置搜索關係
schema.xml中
<solrQueryParser defaultOperator="AND"/> |
6 solr端口號修改
1 修改搜索項目的配置文件
2 修改默認端口號
7訪問url的問題
http://localhost:8983/solr/#/test 瀏覽器頁面地址
http://localhost:8983/solr/test 訪問solr搜索項地址
http://localhost:8983/solr/ solr服務地址
8 solr+zookeeper集羣管理
1 zookeeper的配置
1 在linux上準備多個zookeeper 2 配置zookeeper,加入Data目錄,加入myid,myid中配置server編號,Zoo.cfg中配置 1 dataDir=/… 2 clientPort=218? 3 節點列表 server.1=ip:port:port server.2=ip:port:port … 3 啓動所有的zookeeper節點 Sh zkServer.sh start Sh zkServer.sh status |
2 solr項目的配置和啓動
1 解壓solr複製war到tomcatwebapp下
2將solr中的ext目錄lib目錄下的jar拷貝到tomcat的solr/web-inf/lib下
3配置solrhome,選定目錄如usr/local/solr/solrhome 修改tomcat中的solr項目的web.xml,將項目加載路徑指向solrhome |
3 部署多個solr項目實例
修改tomcat和solr的端口號,啓動多個solr
|
4 配置tomcat的java_opts選項,在tomcat中配置zookeeper的集羣ip
JAVA_OPTS=”-DzkHost=ip:2181,ip:2182,ip:2183” |