一、環境
1.IDEA
2.JDK1.8
3.CDH5.7.0
二、建構開發環境
1.建立Maven工程,引入solr相關包
<!--solr-->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3-cdh5.7.0</version>
</dependency>
最終pom檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>BG</groupId>
<artifactId>Hadoop</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<properties>
<hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
<hbase.version>1.2.0-cdh5.7.0</hbase.version>
<solr.version>4.10.3-cdh5.7.0</solr.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.apache.hadoop</groupId>-->
<!-- <artifactId>hadoop-common</artifactId>-->
<!-- <version>2.5.0-cdh5.2.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
</dependency>
<!--solr-->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>${solr.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
三、功能代碼
1.增删改
package solr;
import Utils.ReadtxtUtils;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
//import org.junit.Test;
public class IndexManager {
/**
* 建立索引初始版本
* @throws Exception
*/
public void IndexCreate() throws Exception{
//建立和Solr服務端連接配接
SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");
//建立solr文檔對象
SolrInputDocument doc = new SolrInputDocument();
//域要先定義後使用,還有注意必須要有id主鍵域
//solr中沒有專用的修改方法,更新其實就是,先删除同一id的索引,然後,再添加
doc.addField("id", "a002");
doc.addField("product_name", "台燈1`111");
doc.addField("product_price", "12.5");
doc.addField("product_description", "12.5");
//将文檔加入solrServer對象中
solrServer.add(doc);
//送出
solrServer.commit();
}
/**
* 添加抽象化參數
* @param id 檔案名稱
* @param product_name
* @param product_price
* @param product_description 檔案描述内容
* @throws Exception
*/
public void IndexCreate(String id,String product_name,String product_price,String product_description) throws Exception{
//建立和Solr服務端連接配接
SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");
//建立solr文檔對象
SolrInputDocument doc = new SolrInputDocument();
//域要先定義後使用,還有注意必須要有id主鍵域
//solr中沒有專用的修改方法, 會自動根據id進行查找,如果找到了則删除原來的将新的加入就是修改,如果沒找到,将新的直接加入則就是新增
doc.addField("id", id);
doc.addField("product_name", product_name);
doc.addField("product_price", product_price);
doc.addField("product_description", product_description);
//将文檔加入solrServer對象中
solrServer.add(doc);
//送出
solrServer.commit();
}
/**
* 删除文檔
* @throws Exception
*/
public void IndexDel() throws Exception{
//建立和Solr服務端連接配接
SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");
//根據主鍵id進行删除
// solrServer.deleteById("a002");
//根據查詢删除,這裡是删除所有*:*
solrServer.deleteByQuery("*:*");
//送出
solrServer.commit();
}
public static void main(String[] args) throws Exception {
//readToString方法,将txt文檔内容讀出來
String filecontent=new ReadtxtUtils().readToString("datas/背影-朱自清.txt");
new IndexManager().IndexCreate("article001","ip/opt/datas/影-朱自清.txt","/opt/datas/影-朱自清.txt",filecontent);
}
}
2.查詢
package solr;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServer;
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.junit.Test;
public class IndexSearch {
public static void main(String[] args) throws Exception{
String key="attr_content";//attr_content
String value="*";
new IndexSearch().IndexSearchByQuery(key,value);
}
/**
* 通用查詢原始
* @throws Exception
*/
public void IndexSearch1() throws Exception{
//連接配接solr服務端
SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");
//建立solr查詢條件對象
SolrQuery solrQuery = new SolrQuery();
//查詢所有
solrQuery.setQuery("*:*");
//查詢并擷取查詢響應對象
QueryResponse queryResponse = solrServer.query(solrQuery);
//從查詢響應中擷取查詢結果集對象
SolrDocumentList results = queryResponse.getResults();
//列印一共查詢到多少條記錄,也就是記錄總數
System.out.println("====================================================");
System.out.println("=====count:" + results.getNumFound());
//周遊查詢結果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
System.out.println("============="+doc.get("product_name"));
// System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
}
/**
* 修改依據key:value查詢
* @param key
* @param value
* @throws Exception
*/
public void IndexSearchByQuery(String key,String value) throws Exception{
//連接配接solr服務端
SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection2");
//建立solr查詢條件對象
SolrQuery solrQuery = new SolrQuery();
//查詢所有
solrQuery.setQuery(key+":"+value);
//查詢并擷取查詢響應對象
QueryResponse queryResponse = solrServer.query(solrQuery);
//從查詢響應中擷取查詢結果集對象
SolrDocumentList results = queryResponse.getResults();
//列印一共查詢到多少條記錄,也就是記錄總數
System.out.println("====================================================");
System.out.println("=====count:" + results.getNumFound());
//周遊查詢結果集
for(SolrDocument doc : results){
System.out.println("==============UUID : "+doc.get("id"));
System.out.println("=======Origin Path : "+doc.get("path"));
System.out.println("===========Content : "+doc.get("attr_content"));
System.out.println("====================================================");
}
}
/**
* 複雜查詢原始
* 過濾、排序、條數+分頁、高亮
* @throws Exception
*/
public void IndexSearch2() throws Exception{
//連接配接solr服務端
SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr");
//建立solr查詢條件對象
SolrQuery solrQuery = new SolrQuery();
//查詢關鍵字輸入
solrQuery.setQuery("背影");
//設定預設搜尋域
solrQuery.set("df", "product_keywords");
//設定過濾查詢
solrQuery.addFilterQuery("product_price:[1 TO 100]");
//設定排序,這裡是降序
solrQuery.setSort("product_price", ORDER.desc);
//=======設定分頁========
//設定起始條數
solrQuery.setStart(0);
//設定查詢多少條
solrQuery.setRows(50);
//========設定高亮顯示=======
//高亮預設是關閉的,是以要手動開啟
solrQuery.setHighlight(true);
//設定需要高亮顯示的域
solrQuery.addHighlightField("product_name");
//設定高亮字首
solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
//設定高亮字尾
solrQuery.setHighlightSimplePost("</span>");
//===================查詢并擷取查詢響應對象=====================================
QueryResponse queryResponse = solrServer.query(solrQuery);
//從查詢響應中擷取查詢結果集對象
SolrDocumentList results = queryResponse.getResults();
//列印一共查詢到多少條記錄,也就是記錄總數
System.out.println("=====count====" + results.getNumFound());
//周遊查詢結果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
//擷取高亮
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<String> list = highlighting.get(doc.get("id")).get("product_name");
if(list != null && list.size() > 0){
String hlName = list.get(0);
System.out.println("=======high lighting=====" + hlName);
}
System.out.println("============="+doc.get("product_name"));
System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
}
}