Solr

Solr



bin:solr的運行腳本

contrib:solr的一些貢獻軟件/插件,用於增強solr的功能。

dist:該目錄包含build過程中產生的war和jar文件,以及相關的依賴文件。

docs:solr的API文檔

example:solr工程的例子目錄:

example/solr:

該目錄是一個包含了默認配置信息的Solr的Core目錄。

example/multicore:

該目錄包含了在Solr的multicore中設置的多個Core目錄。 

example/webapps:

    該目錄中包括一個solr.war,該war可作爲solr的運行實例工程。

licenses:solr相關的一些許可信息





solr 需要運行在一個Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默認提供Jetty(java寫的Servlet容器),本教程使用Tocmat作爲Servlet容器,環境如下:


Solr:Solr4.10.3

Jdk:jdk1.7.0_72

Tomcat:apache-tomcat- 8.5



Solr整合tomcat 3步



1\solr-4.10.3\example\webapps\solr.war 放到 tomcat 的webapps 裏面 解壓後

2\solr-4.10.3\example\lib\ext\*.jar 放到Tomcat 8.5\webapps\solr\WEB-INF\lib\下

3\solr-4.10.3\example\solr solr數據的根文件  放到你希望的目錄中

Tomcat 8.5\webapps\solr\WEB-INF\web.xml 

<!--打開註釋-->

<env-entry>

       <env-entry-name>solr/home</env-entry-name>

<!--修改爲solr數據的根文件目錄-->

<env-entry-value>D:\solrHome</env-entry-value>

       <env-entry-type>java.lang.String</env-entry-type>

    </env-entry>

  

solr 安裝 中文分詞器


1\IKAnalyzer2012FF_u1.jar 將jar 包 放到Tomcat 8.5\webapps\solr\WEB-INF\lib

2\ext.dic,IKAnalyzer.cfg.xml,stopword.dic 配置文件 放到Tomcat 8.5\webapps\solr\WEB-INF\classes(手動創建這個文件夾)或者放到 solr的classpath下。

3\在schema.xml中添加一個自定義的fieldType,使用中文分析器。

<!-- IKAnalyzer-->

    <fieldType name="text_ik" class="solr.TextField">

      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

    </fieldType>

4\定義field,指定field的type屬性爲text_ik

<!--IKAnalyzer Field-->

   <field name="title_ik" type="text_ik" indexed="true" stored="true" />

   <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>

5\重啓tomcat







solr 

增加

選擇:/collection1/documents

選擇:json 

Document(s):

{"id":"change.me","title":"change.me"}

點擊:Submit Document


改 增加相同id 就可以修改


刪除索引格式如下:

選擇:/collection1/documents

選擇:xml

1) 刪除制定ID的索引 

<delete>

<id>8</id>

</delete>

<commit/>

2) 刪除查詢到的索引數據 

<delete>

<query>product_catalog_name:幽默雜貨</query>

</delete>

<commit/>

3) 刪除所有索引數據

<delete>

<query>*:*</query>

</delete>

<commit/>

點擊:Submit Document


選項:/collection1/query

添加各種添加

點擊:Execute Query


使用dataimport插件批量導入數據。

1、把dataimport插件依賴的jar包添加到solrcore(collection1\lib)中

2、還需要添加mysql驅動

3、配置solrconfig.xml文件,添加一個requestHandler。

 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
  <str name="config">data-config.xml</str>
 </lst>
  </requestHandler>

4、創建一個data-config.xml,保存到collection1\conf\目錄下

<?xml version="1.0" encoding="UTF-8" ?>  
<dataConfig>   
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/lucene" user="root" password="hiroot"/>   
<document>   
<!-- name 隨意-->
<entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products ">
<!--映射 pid 到 solr 中 id-->
 <field column="pid" name="id"/> 
 <field column="name" name="product_name"/> 
 <field column="catalog_name" name="product_catalog_name"/> 
 <field column="price" name="product_price"/> 
 <field column="description" name="product_description"/> 
 <field column="picture" name="product_picture"/> 
</entity>   
</document>   
</dataConfig>

5、如果不使用Solr提供的Field可以針對具體的業務需要自定義一套Field,如下是商品信息Field

<!--product-->
   <field name="product_name" type="text_ik" indexed="true" stored="true"/>
   <field name="product_price"  type="float" indexed="true" stored="true"/>
   <field name="product_description" type="text_ik" indexed="true" stored="false" />
   <field name="product_picture" type="string" indexed="false" stored="true" />
   <field name="product_catalog_name" type="string" indexed="true" stored="true" />
<!-- 聯合 域  將兩個 域 連接在一起-->
   <field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
   <copyField source="product_name" dest="product_keywords"/>
   <copyField source="product_description" dest="product_keywords"/>


  

  

  

  

搭建 solrj

maven:

<!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>


測試:

package com.stevezong.solrj;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrQuery;
/**
 * Solrj 管理
 * 增上改查
 * @author zongx
 *
 */
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;
public class SolrJManager {
@Test
public void testAdd() throws  Exception{
String baseURL = "http://localhost:8080/solr/";
SolrServer server = new HttpSolrServer(baseURL);
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", "haha");
doc.setField("name", "steve");
server.add(doc);
server.commit();
}
@Test
public void testDel() throws Exception{
String baseURL = "http://localhost:8080/solr/";
SolrServer server = new HttpSolrServer(baseURL);
server.deleteByQuery("*:*", 1000);
}
@Test
public void testUpdate() throws Exception{
//更新和添加一樣,Id 相同就是更新 Id 不同就是添加
String baseURL = "http://localhost:8080/solr/";
SolrServer server = new HttpSolrServer(baseURL);
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", "haha");
doc.setField("name", "zong");
server.add(doc);
server.commit();
}
@Test
public void testSELECT() throws Exception{
String baseURL = "http://localhost:8080/solr/";
SolrServer server = new HttpSolrServer(baseURL);
//查詢條件
SolrQuery solrQuery = new SolrQuery();
//名稱爲檯燈
solrQuery.set("q", "product_name:檯燈");
//過濾條件1
solrQuery.set("fq", "product_catalog_name:幽默雜貨");
//過濾條件2
solrQuery.set("fq", "product_price:[* TO 20]");
//排序
solrQuery.addSort("product_price",ORDER.desc);
//分頁 從0
solrQuery.setStart(0);
//分頁 5行
solrQuery.setRows(5);
//默認域
solrQuery.set("df", "product_name");
//需要的域
solrQuery.set("fl", "id,product_name");
//開啓高亮
solrQuery.setHighlight(true);
//高亮的域
solrQuery.addHighlightField("product_name");
//高亮的域的前綴
solrQuery.setHighlightSimplePre("<span style='color:red'>");
//高亮域的後綴
solrQuery.setHighlightSimplePost("</span>");
//普通的信息
QueryResponse response = server.query(solrQuery);
//高亮的信息
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
//Map<id,Map<域名,List<info>>>
SolrDocumentList docs = response.getResults();
for (SolrDocument solrDocument : docs) {
System.out.println(solrDocument.get("product_catalog_name"));
System.out.println(solrDocument.get("product_price"));
System.out.println(solrDocument.get("product_name"));
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("product_picture"));
Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
List<String> list = map.get("product_name");
for (String string : list) {
System.out.println(string);
}
}
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章