solr 7.x 查詢及高亮


查詢時的api分為兩種一種是萬能的set,還有一種是setxxxquery

 1     @Test  2     public void search2() throws Exception{  3         HttpSolrClient solrClient  = new HttpSolrClient.Builder("http://127.0.0.1:8080/solr/solrcore1").build();  4         SolrQuery query = new SolrQuery();  5         query.set("q","test001");  6         
 7         
 8         //1.過濾器
 9         query.set("fq","pprice:[1 TO 100]");//query.setFilterQueries("pprice:[1 TO 100]");也可以用addFiterQuries設置多過濾條件 10         
11         //2.排序
12         query.set("sort","pprice desc,id asc");//query.setSort("pprice",ORDER.desc); addSort 13         
14         
15         //3.設置查詢到的文檔返回的域對象
16         query.set("fl","id,pname,pprice");//query.setFields("id,pname"); 17         
18         //4.設置默認查詢的域
19         query.set("df","pname"); 20         
21         //5.分頁
22         query.set("start",0);  //query.setStart(0)
23         query.set("rows",5);   //query.setRows(5) 24         
25         //6.高亮
26         query.set("hl",true); 27         //設置高亮域(設置的域必須在查詢條件中存在)
28         query.set("h1.fl","pname","pprice"); 29         //前綴
30         query.set("hl.simple.pre","<em style='color:red'>"); 31         //后綴
32         query.set("hl.simple.post","</em>"); 33         
34         /*query.setHighlight(true); 35  query.addHighlightField("pname"); 36  query.setHighlightSimplePre("<em style='color:red'>"); 37  query.setHighlightSimplePost("</em>");*/
38 
39         
40         QueryResponse response = solrClient.query(query); 41         SolrDocumentList results = response.getResults(); 42         //k是id,內部的map的key是域名,其value是高亮的值集合
43         Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); 44         System.out.println("匹配的結果總數是-------"+results.getNumFound()); 45         for(SolrDocument document:results) { 46             System.out.println("id----" + document.get("id")); 47             System.out.println("pname-----" + document.get("pname")); 48             System.out.println("pprice------" + document.get("pprice")); 49             List<String> list = null; 50             if(highlighting.get(document.get("id")) != null) { 51                list = highlighting.get(document.get("id")).get("pname"); 52             }else { 53                 System.out.println("無法獲取高亮map"); 54  } 55             
56             if (list != null && list.size() > 0) { 57                 System.out.println("高亮顯示的內容:----"+list.get(0)); 58             }else { 59                 System.out.println("高亮顯示的內容為空!!!"); 60  } 61             System.out.println("========================="); 62  } 63     }

可以看到查詢時用的set(xxx)與solrAdmin頁面的查詢界面想對應

 

 

關於高亮:

1.首先高亮的域必須出現在查詢條件中,如果你設置了返回域,請把要高亮的域對象包含其中

2.高亮的域對象必須在solrconfig中必須設置其stored為true

3.高亮的數據結構如下圖所示

可以看到是map中鑲嵌着map,外層map的key是匹配到的document對象的id,其value是一個map,這個map的key才是設置的高亮的域對象名稱,value中包含着高亮的內容

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM