Fork me on GitHub

Solr5.3.1 SolrJ查询索引结果

  通过SolrJ获取Solr检索结果

  1、通过SolrParams的方式提交查询参数

复制代码
       SolrClient solr = new HttpSolrClient("http://localhost:8080/solr/core");
            Map<String, String> map = new HashMap<String, String>();  
            keyword = "".equals(keyword) ? "*" : keyword;
            map.put("q", "search_item:" + keyword);
            map.put("indent", "true");
            map.put("hl", "true"); 
            map.put("hl.fl", "title, summary");
            map.put("hl.simple.pre", "<font color=\"red\">");
            map.put("hl.simple.post", "</font>");
            map.put("start", "0");
            map.put("rows", "10");
            
            SolrParams params = new MapSolrParams(map);
            try {
                QueryResponse resp = solr.query(params);
                Map<String, Map<String, java.util.List<String>>> highlight = resp.getHighlighting();//高亮集合
                SolrDocumentList docsList = resp.getResults();//文档集合
                int docNumFound = (int) docsList.getNumFound();//文档数
                ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
                String key = "";
                Map<String, String> docMap;
                for (SolrDocument doc : docsList) {
                    docMap = new HashMap<String, String>();
                    key = doc.get("id").toString();
                    if(key != null && highlight.get(key) != null){
                        docMap.put("id", key);
                        docMap.put("type", doc.get("type").toString());
                        String title = (String) (!"*".equals(keyword) && highlight.get(key).get("title") != null ? highlight.get(key).get("title").get(0) : doc.get("title"));
                        docMap.put("title", title);
                        String summary = (String) (!"*".equals(keyword) && highlight.get(key).get("summary") != null ? highlight.get(key).get("summary").get(0) : doc.get("summary"));
                        docMap.put("summary", summary);
                    }
                    list.add(docMap);
                }
                solr.close();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                if (solr != null) {
                    try {
                        solr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
复制代码

  2、通过SolrQuery提交参数

复制代码
        SolrClient solr = new HttpSolrClient("http://localhost:8080/solr/core");  
        SolrQuery query = new SolrQuery();  
        //设置高亮  
        query.setQuery("name:datou");  
        query.setHighlight(true); // 开启高亮组件或用query.setParam("hl", "true");  
        query.addHighlightField("name");// 高亮字段  
        query.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀  
        query.setHighlightSimplePost("</font>");//后缀  
//      query.setHighlightSnippets(1);//结果分片数,默认为1  
//      query.setHighlightFragsize(1000);//每个分片的最大长度,默认为100  
          
        System.out.println(query);//用于调试程序  
          
        QueryResponse rsp = solr.query(query);  
        NamedList list = (NamedList) rsp.getResponse().get("highlighting");  
        System.out.println(list);//用于显示list中的值    
          
        for (int i = 0; i < list.size(); i++){  
            System.out.println("id=" + list.getName(i) + "文档中高亮显示的字段:" + list.getVal(i));  
        }  
复制代码

 

posted @   秋楓  阅读(893)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示