• solrj管理索引库


    solrj管理索引库

    1.1. 什么是solrJ

           solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:

    依赖的jar包:

     

    代码实现:

    使用solrj对索引新增、修改、删除

    package cn.itcast.solr;
    
    import org.apache.solr.client.solrj.SolrServer;
    import org.apache.solr.client.solrj.impl.HttpSolrServer;
    import org.apache.solr.common.SolrInputDocument;
    import org.junit.Test;
    
    public class IndexManagerTest {
    //新增、修改
    
        @Test
        public void testIndexCreate() throws Exception{
            //创建和Solr服务端连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            
            //创建solr文档对象
            SolrInputDocument doc = new SolrInputDocument();
            //域要先定义后使用,还有注意必须要有id主键域
            //solr中没有专用的修改方法, 会自动根据id进行查找,如果找到了则删除原来的将新的加入就是修改,如果没找到,将新的直接加入则就是新增
            doc.addField("id", "a001");
            doc.addField("product_name", "台灯1`111");
            doc.addField("product_price", "12.5");
            
            //将文档加入solrServer对象中
            solrServer.add(doc);
            
            //提交
            solrServer.commit();
        }
        
        //删除
        @Test
        public void testIndexDel() throws Exception{
            //创建和Solr服务端连接
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            
            //根据主键id进行删除
            //solrServer.deleteById("a001");
            
            //根据查询删除,这里是删除所有*:*
            solrServer.deleteByQuery("*:*");
            //提交
            solrServer.commit();
        }
    }

     复杂查询:其中包含查询、过滤、分页、排序、高亮显示等处理

    package cn.itcast.solr;
    
    import java.util.List;
    import java.util.Map;
    
    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.SolrQuery.ORDER;
    import org.apache.solr.client.solrj.SolrServer;
    import org.apache.solr.client.solrj.impl.HttpSolrServer;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.SolrDocument;
    import org.apache.solr.common.SolrDocumentList;
    import org.junit.Test;
    
    public class IndexSearchTest {
    //查询所有:
        @Test
        public void testIndexSearch1() throws Exception{
            //连接solr服务端
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            
            //创建solr查询条件对象
            SolrQuery solrQuery = new SolrQuery();
            //查询所有
            solrQuery.setQuery("*:*");
            
            //查询并获取查询响应对象
            QueryResponse queryResponse = solrServer.query(solrQuery);
            //从查询响应中获取查询结果集对象
            SolrDocumentList results = queryResponse.getResults();
            //打印一共查询到多少条记录,也就是记录总数
            System.out.println("=====count====" + results.getNumFound());
            //遍历查询结果集
            for(SolrDocument doc : results){
                System.out.println("============="+doc.get("id"));
                System.out.println("============="+doc.get("product_name"));
                System.out.println("============="+doc.get("product_price"));
                System.out.println("====================================================");
            }
        }
        
        //复杂查询,
        
        @Test
        public void testIndexSearch2() throws Exception{
            //连接solr服务端
            SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
            
            //创建solr查询条件对象
            SolrQuery solrQuery = new SolrQuery();
            //查询关键字输入
            solrQuery.setQuery("台灯");
            //设置默认搜索域
            solrQuery.set("df", "product_keywords");
            //设置过滤查询
            solrQuery.addFilterQuery("product_price:[1 TO 100]");
            //设置排序,这里是降序
            solrQuery.setSort("product_price", ORDER.desc);
            //=======设置分页========
            //设置起始条数
            solrQuery.setStart(0);
            //设置查询多少条
            solrQuery.setRows(50);
            
            //========设置高亮显示=======
            //高亮默认是关闭的,所以要手动开启
            solrQuery.setHighlight(true);
            //设置需要高亮显示的域
            solrQuery.addHighlightField("product_name");
            //设置高亮前缀
            solrQuery.setHighlightSimplePre("<span style="color:red">");
            //设置高亮后缀
            solrQuery.setHighlightSimplePost("</span>");
            
            //===================查询并获取查询响应对象=====================================
            QueryResponse queryResponse = solrServer.query(solrQuery);
            //从查询响应中获取查询结果集对象
            SolrDocumentList results = queryResponse.getResults();
            //打印一共查询到多少条记录,也就是记录总数
            System.out.println("=====count====" + results.getNumFound());
            //遍历查询结果集
            for(SolrDocument doc : results){
                System.out.println("============="+doc.get("id"));
                //获取高亮
                Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
                List<String> list = highlighting.get(doc.get("id")).get("product_name");
                if(list != null && list.size() > 0){
                    String hlName = list.get(0);
                    System.out.println("=======high lighting=====" + hlName);
                }
                
                System.out.println("============="+doc.get("product_name"));
                System.out.println("============="+doc.get("product_price"));
                System.out.println("====================================================");
            }
        }
    }
  • 相关阅读:
    在devc++中使用to_string
    死磕Spring之AOP篇
    死磕Spring之AOP篇
    service to hadoop01/hadoop01:8020 Datanode denied communication with namenode because the host is not in the include-list
    Hadoop和HBASE对应兼容版本
    Flink SQL CDC中如何定义watermark和计算列
    Scala函数详解
    HBase 底层原理详解
    流计算 Oceanus SQL 开发指南
    NLP(二十二):基于依存句法的关键词抽取算法
  • 原文地址:https://www.cnblogs.com/dw3306/p/9661088.html
Copyright © 2020-2023  润新知