詳解java整合solr5.0之solrj的使用
1、首先導入solrj需要的的架包

2、需要注意的是低版本是solr是使用SolrServer進行URL實例的,5.0之后已經(jīng)使用SolrClient替代這個類了,在添加之后首先我們需要根據(jù)schema.xml配置一下我們的分詞器

這里的msg_all還需要在schema.xml中配置

它的主要作用是將msg_title,msg_content兩個域的值拷貝到msg_all域中,我們在搜索的時候可以只搜索這個msg_all域就可以了,
solr默認搜索需要帶上域,比如

solr更改默認搜索域的地方也在schema.xml,它默認是搜索text域的,但是5.0之后不在這里配置默認搜索域了,它的文檔也告訴我們,在solrconfig.xml中配置

在solrconfig.xml中配置默認搜素域,這樣我們就可以按照我們自己的域進行搜索了

配置好以上,就可以使用代碼進行CURD
private final static String URL="http://localhost:8080/solr/java";
public SolrClient server=null;
@Before
public void init() throws Exception{
server=new HttpSolrClient(URL);
}
刪除所有分詞
//刪除所有分詞
@Test
public void testDel() throws Exception{
server.deleteByQuery("*:*");
server.commit();//先刪除 基于query的刪除 會刪除所有建立的索引文件
}
增加分詞
@Test
public void testAdd() throws Exception{
SolrInputDocument doc=new SolrInputDocument();
doc.addField("id", "3");
doc.addField("msg_title", "新浪微博");
doc.addField("msg_content", "我有一個微博帳號名字叫做什么呢?");
server.add(doc);
server.commit();
}
基于Bean增加分詞
@Test
public void test03() throws Exception{
List<Message> msgs=new ArrayList<Message>();
msgs.add(new Message("4", "第四個測試solr測試文件", new String[]{"中華人民共和國萬歲","中華上下五千年那年"}));
msgs.add(new Message("5", "第5個好朋友是什么意思呢?", new String[]{"上海是個好地方","歌唱我們親愛的祖國曾經(jīng)走過千山萬水"}));
server.addBeans(msgs);
server.commit();
}
查詢結果
@Test
public void test04() throws Exception{
//定義查詢內(nèi)容 * 代表查詢所有 這個是基于結果集
SolrQuery query = new SolrQuery("solr");
query.setStart(0);//起始頁
query.setRows(3);//每頁顯示數(shù)量
QueryResponse rsp = server.query( query );
SolrDocumentList results = rsp.getResults();
System.out.println(results.getNumFound());//查詢總條數(shù)
for(SolrDocument doc:results){
System.out.println(doc);
}
}
將查詢結果集封裝為對象Bean
@Test
public void test05() throws Exception{
SolrQuery query = new SolrQuery("中華");// * 號 是查詢 所有的數(shù)據(jù)
QueryResponse rsp = server.query( query );
List<Message> beans = rsp.getBeans(Message.class);//這個不能獲取查詢的總數(shù)了 也不能高亮
for(Message message:beans){
System.out.println(message.toString());
}
}
將結果集高亮顯示
@Test
public void test06() throws Exception{
//定義查詢內(nèi)容 * 代表查詢所有 這個是基于結果集
SolrQuery query = new SolrQuery("solr");
query.setStart(0);//起始頁
query.setRows(5);//每頁顯示數(shù)量
query.setParam("hl.fl", "msg_title,msg_content");//設置哪些字段域會高亮顯示
query.setHighlight(true).setHighlightSimplePre("<span class='hight'>")
.setHighlightSimplePost("</span>");
QueryResponse rsp = server.query( query );
SolrDocumentList results = rsp.getResults();
System.out.println(results.getNumFound());//查詢總條數(shù)
for(SolrDocument doc:results){
String id = (String) doc.getFieldValue("id"); //id is the uniqueKey field
if(rsp.getHighlighting().get(id)!=null){
//高亮必須要求存儲 不存儲的話 沒法添加高亮
System.out.println(rsp.getHighlighting().get(id).get("msg_title"));
}
}
}
ok,solr的基本使用就完成了
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
MyBatis使用級聯(lián)操作解決lombok構造方法識別失敗問題
這篇文章主要介紹了MyBatis使用級聯(lián)操作解決lombok構造方法識別失敗問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07
Java中實現(xiàn)文件上傳下載的三種解決方案(推薦)
這篇文章主要介紹了Java中實現(xiàn)文件上傳下載的三種解決方案的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
Spring Bean生命周期之BeanDefinition的合并過程詳解
這篇文章主要為大家詳細介紹了Spring Bean生命周期之BeanDefinition的合并過程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
Spring-AOP 靜態(tài)正則表達式方法如何匹配切面
這篇文章主要介紹了Spring-AOP 靜態(tài)正則表達式方法如何匹配切面的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

