solr 7.x 查询及高亮
Posted tele-share
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中包含着高亮的内容
以上是关于solr 7.x 查询及高亮的主要内容,如果未能解决你的问题,请参考以下文章