solr在java中的使用實(shí)例代碼
SolrJ是操作Solr的Java客戶端,它提供了增加、修改、刪除、查詢Solr索引的JAVA接口。SolrJ針對(duì) Solr提供了Rest 的HTTP接口進(jìn)行了封裝, SolrJ底層是通過(guò)使用httpClient中的方法來(lái)完成Solr的操作。
jar包的引用(maven pom.xml):
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
java代碼:
package entity;
import java.io.IOException;
import java.util.List;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
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;
public class SolrJTest {
//指定solr服務(wù)器的地址
private final static String SOLR_URL = "http://localhost:8080/solr/";
/**
* 創(chuàng)建SolrServer對(duì)象
*
* 該對(duì)象有兩個(gè)可以使用,都是線程安全的
* 1、CommonsHttpSolrServer:?jiǎn)?dòng)web服務(wù)器使用的,通過(guò)http請(qǐng)求的
* 2、 EmbeddedSolrServer:內(nèi)嵌式的,導(dǎo)入solr的jar包就可以使用了
* 3、solr 4.0之后好像添加了不少東西,其中CommonsHttpSolrServer這個(gè)類改名為HttpSolrClient
*
* @return
*/
public HttpSolrClient createSolrServer(){
HttpSolrClient solr = null;
solr = new HttpSolrClient(SOLR_URL);
return solr;
}
/**
* 往索引庫(kù)添加文檔
* @throws IOException
* @throws SolrServerException
*/
public void addDoc() throws SolrServerException, IOException{
//構(gòu)造一篇文檔
SolrInputDocument document = new SolrInputDocument();
//往doc中添加字段,在客戶端這邊添加的字段必須在服務(wù)端中有過(guò)定義
document.addField("id", "8");
document.addField("name", "周新星");
document.addField("description", "一個(gè)灰常牛逼的軍事家");
//獲得一個(gè)solr服務(wù)端的請(qǐng)求,去提交 ,選擇具體的某一個(gè)solr core
HttpSolrClient solr = new HttpSolrClient(SOLR_URL + "my_core");
solr.add(document);
solr.commit();
solr.close();
}
/**
* 根據(jù)id從索引庫(kù)刪除文檔
*/
public void deleteDocumentById() throws Exception {
//選擇具體的某一個(gè)solr core
HttpSolrClient server = new HttpSolrClient(SOLR_URL+"my_core");
//刪除文檔
server.deleteById("8");
//刪除所有的索引
//solr.deleteByQuery("*:*");
//提交修改
server.commit();
server.close();
}
/**
* 查詢
* @throws Exception
*/
public void querySolr() throws Exception{
HttpSolrClient solrServer = new HttpSolrClient(SOLR_URL+"my_core/");
SolrQuery query = new SolrQuery();
//下面設(shè)置solr查詢參數(shù)
//query.set("q", "*:*");// 參數(shù)q 查詢所有
query.set("q","周星馳");//相關(guān)查詢,比如某條數(shù)據(jù)某個(gè)字段含有周、星、馳三個(gè)字 將會(huì)查詢出來(lái) ,這個(gè)作用適用于聯(lián)想查詢
//參數(shù)fq, 給query增加過(guò)濾查詢條件
query.addFilterQuery("id:[0 TO 9]");//id為0-4
//給query增加布爾過(guò)濾條件
//query.addFilterQuery("description:演員"); //description字段中含有“演員”兩字的數(shù)據(jù)
//參數(shù)df,給query設(shè)置默認(rèn)搜索域
query.set("df", "name");
//參數(shù)sort,設(shè)置返回結(jié)果的排序規(guī)則
query.setSort("id",SolrQuery.ORDER.desc);
//設(shè)置分頁(yè)參數(shù)
query.setStart(0);
query.setRows(10);//每一頁(yè)多少值
//參數(shù)hl,設(shè)置高亮
query.setHighlight(true);
//設(shè)置高亮的字段
query.addHighlightField("name");
//設(shè)置高亮的樣式
query.setHighlightSimplePre("<font color='red'>");
query.setHighlightSimplePost("</font>");
//獲取查詢結(jié)果
QueryResponse response = solrServer.query(query);
//兩種結(jié)果獲?。旱玫轿臋n集合或者實(shí)體對(duì)象
//查詢得到文檔的集合
SolrDocumentList solrDocumentList = response.getResults();
System.out.println("通過(guò)文檔集合獲取查詢的結(jié)果");
System.out.println("查詢結(jié)果的總數(shù)量:" + solrDocumentList.getNumFound());
//遍歷列表
for (SolrDocument doc : solrDocumentList) {
System.out.println("id:"+doc.get("id")+" name:"+doc.get("name")+" description:"+doc.get("description"));
}
//得到實(shí)體對(duì)象
List<Person> tmpLists = response.getBeans(Person.class);
if(tmpLists!=null && tmpLists.size()>0){
System.out.println("通過(guò)文檔集合獲取查詢的結(jié)果");
for(Person per:tmpLists){
System.out.println("id:"+per.getId()+" name:"+per.getName()+" description:"+per.getDescription());
}
}
}
public static void main(String[] args) throws Exception {
SolrJTest solr = new SolrJTest();
//solr.createSolrServer();
solr.addDoc();
solr.deleteDocumentById();
solr.querySolr();
}
}
參考文檔:http://www.doc88.com/p-6763747939865.html
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java經(jīng)驗(yàn)點(diǎn)滴:處理沒(méi)有被捕獲的異常
Java經(jīng)驗(yàn)點(diǎn)滴:處理沒(méi)有被捕獲的異常...2006-12-12
Java線程Dump分析工具jstack解析及使用場(chǎng)景
這篇文章主要介紹了Java線程Dump分析工具jstack解析及使用場(chǎng)景,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Java基于WebMagic爬取某豆瓣電影評(píng)論的實(shí)現(xiàn)
這篇文章主要介紹了Java基于WebMagic爬取某豆瓣電影評(píng)論的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Java報(bào)錯(cuò):java.lang.UnsatisfiedLinkError問(wèn)題的解決辦法
在Java開(kāi)發(fā)中,java.lang.UnsatisfiedLinkError是一種與本地方法調(diào)用相關(guān)的常見(jiàn)異常,本文將詳細(xì)分析這一異常的背景、可能的原因、錯(cuò)誤代碼示例、正確代碼示例,以及編寫(xiě)代碼時(shí)需要注意的事項(xiàng),需要的朋友可以參考下2024-09-09
解決spring boot 1.5.4 配置多數(shù)據(jù)源的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決spring boot 1.5.4 配置多數(shù)據(jù)源的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
spring?Cloud微服務(wù)阿里開(kāi)源TTL身份信息的線程間復(fù)用
這篇文章主要為大家介紹了spring?Cloud微服務(wù)中使用阿里開(kāi)源TTL身份信息的線程間復(fù)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
IDEA中osgi的開(kāi)發(fā)應(yīng)用指南詳解
這篇文章主要介紹了IDEA中osgi的開(kāi)發(fā)應(yīng)用指南詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04

