solr<三> Java 操作 solr query + facet
来源:互联网 发布:java 通过ftp下载文件 编辑:程序博客网 时间:2024/06/16 05:10
1:查询 SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。 下面是笔者封装的一个查询函数: public static QueryResponse Search(String[] field, String[] key, int start, int count, String[] sortfield, Boolean[] flag, Boolean hightlight) { //检测输入是否合法 if (null == field || null == key || field.length != key.length) { return null; } if (null == sortfield || null == flag || sortfield.length != flag.length) { return null; } SolrQuery query = null; try { //初始化查询对象 query = new SolrQuery(field[0] + ":" + key[0]); for (int i = 0; i < field.length; i++) { query.addFilterQuery(field[i] + ":" + key[i]); } //设置起始位置与返回结果数 query.setStart(start); query.setRows(count); //设置排序 for(int i=0; i<sortfield.length; i++){ if (flag[i]) { query.addSortField(sortfield[i], SolrQuery.ORDER.asc); } else { query.addSortField(sortfield[i], SolrQuery.ORDER.desc); } } //设置高亮 if (null != hightlight) { query.setHighlight(true); // 开启高亮组件 query.addHighlightField("title");// 高亮字段 query.setHighlightSimplePre("<font color="red">");// 标记 query.setHighlightSimplePost("</font>"); query.setHighlightSnippets(1);//结果分片数,默认为1 query.setHighlightFragsize(1000);//每个分片的最大长度,默认为100 } } catch (Exception e) { e.printStackTrace(); } QueryResponse rsp = null; try { rsp = solr.query(query); } catch (Exception e) { e.printStackTrace(); return null; } //返回查询结果 return rsp; } 补充一下范围查询的格式:[star t TO end],start与end是相应数据格式的值的字符串形式,“TO” 一定要保持大写! 2: 读取查询结果 DocList读取返回结果: SolrDocumentList solrList = rsp.getResults(); Beans读取返回结果: List<Item> tmpLists = rsp.getBeans(Item.class); 读取高亮显示结果: rsp = Search(field, key, 0, 10, sortfield, flag, true); if(null == rsp){ return; } Map<String, Map<String, List<String>>> hightlight = rsp.getHighlighting(); //Item即为上面定义的bean类 List<Item> tmpLists = rsp.getBeans(Item.class); for (int i = 0; i < tmpLists.size(); i++) { //hightlight的键为Item的id,值唯一,我们设置的高亮字段为title String hlString = hightlight.get(tmpLists.get(i).getId()).get("title").toString(); if (null != hlString) { System.out.println(hlString); } } 3: Facet的一个应用:自动补全 //prefix为前缀,min为最大返回结果数 public static String[] autoComplete(String prefix, int min) { String words[] = null; StringBuffer sb = new StringBuffer(""); SolrQuery query = new SolrQuery("*.*"); QueryResponse rsp= new QueryResponse(); //Facet为solr中的层次分类查询 try { query.setFacet(true); query.setQuery("*:*"); query.setFacetPrefix(prefix); query.addFacetField("title"); rsp = solr.query(query); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return null; } if(null != rsp){ FacetField ff = rsp.getFacetField("title"); List<Count> countList = ff.getValues(); if(null == countList){ return null; } for(int i=0; i<countList.size(); i++){ String tmp[] = countList.get(i).toString().split(" "); //排除单个字 if(tmp[0].length()< 2){ continue; } sb.append(tmp[0] + " "); min--; if(min == 0){ break; } } words = sb.toString().split(" "); }else{ return null; } return words; }
阅读全文
0 0
- solr<三> Java 操作 solr query + facet
- solr facet
- solr facet
- Solr Facet
- solr facet
- [solr] - Facet
- [solr] - Facet
- [solr] - Facet
- Solr Facet.
- Solr Facet
- solr query
- solr Query
- solr Query
- Solr --- Query
- solr facet是个好东东
- solr的facet性能
- Solr学习总结-Facet
- solr的facet查询
- Tomcat开启8443端口
- Java实现 大顶堆 和 小顶堆
- hive02分区
- springmvc基本原理
- 安卓在项目中添加Android兼容包( v4、v7 、、、)
- solr<三> Java 操作 solr query + facet
- 生成分类标签文件.txt
- ZOJ--1004:Anagrams by Stack(dfs)
- 知道SELECT语句怎么把查询到的数据输出到Excel中
- FireDac Locate 方法
- CentOS 7将网卡名称eno16777736改为eth0
- mysql查询今日、本周、本月记录
- MQTT win7 server --- win 7 JAVA client --- VMware ubuntu 测试C client
- css入门