solr 一些前缀例如:q、fq、df 的用法

 具体的用法在代码中有注释,这边就不在累述了。

public class SolrjTest {
    
    //添加,修改
    @Test
    public void test1() throws IOException, SolrServerException {

        //和solr服务器创建连接,参数为solr服务器地址
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr");

        //创建一个文档对象
        SolrInputDocument input = new SolrInputDocument();

        //向文档对象添加Field域
        //第一个参数:域的名称,域的名称必须是在schema.xml中定义的
        //第二个参数:域的值
        input.addField("id",10001);
        input.addField("item_title","测试新增内容111");
        input.addField("item_sell_point","买一送一");
        input.addField("item_price",100000);
        input.addField("item_image","");
        input.addField("item_category_name","新增");
        input.addField("item_desc","新增测试");

        //SolrInputDocument 添加到索引库中
        //solrj 没有提供update方法,如果想要更新数据同样用add,add 方法其实就是先删除,后insert
        //只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加。
        solrServer.add(input);

        //提交修改
        solrServer.commit();
    }
    
    //删除
    @Test
    public void test2() throws IOException, SolrServerException {
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr");
        //根据 id 删除文档
        solrServer.deleteById("10001");
        solrServer.commit();
    }

    //删除
    @Test
    public void test3() throws IOException, SolrServerException {
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
        //根据查询删除索引,删除所有
        solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }
    
    //查询
    @Test
    public void test4() throws IOException, SolrServerException {

        //指定连接collection1,相当于mysql的库
        //一个collection就是一个solrCore即solr的实例
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");

        SolrQuery solrParams = new SolrQuery();

        // q - 查询字符串,必须的,如果查询所有使用*:*。
        // solrParams.set("q","item_title:测试新增内容");

        //查看源码得知,相当于 solrParams.set("q","测试新增内容");
        //CommonParams中可以查看对应的前缀参数
        solrParams.setQuery("测试新增内容");

        // df-指定一个搜索Field
        solrParams.set("df","item_title");

        //fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的
        //item_price 在 1-1000000 之间,用 * 表示无限
        //item_price:[100 TO *] 表示,item_price 大于 100
        //也可写成 solrParams.setFilterQueries("item_price:[1 TO 1000000]");
        solrParams.set("fq","item_price:[1 TO 1000000]");

        //sort - 排序
        //也可写成 solrParams.setSort("item_price", SolrQuery.ORDER.asc);
        solrParams.set("sort"," item_price desc");


        //start - 分页显示使用,开始记录下标,从0开始
        //solrParams.setStart(0);
        solrParams.set("start",0);

        //rows - 指定返回结果最多有多少条记录,配合start来实现分页。
        //solrParams.setRows(2);
        solrParams.set("rows",2);

        //fl - 指定返回那些字段内容,用逗号或空格分隔多个
        // 执行查询,只会返回 id,item_title,item_price
        //相当于 solrParams.setFields("id,item_title,item_price");
        solrParams.set("fl","id,item_title,item_price");

        //设置高亮
        solrParams.setHighlight(true);
        //设置高亮的字段
        solrParams.addHighlightField("item_title");
        //设置高亮前缀
        solrParams.setHighlightSimplePre("<em>");
        //设置高亮后缀
        solrParams.setHighlightSimplePost("</em>");



        QueryResponse response = solrServer.query(solrParams);
        SolrDocumentList results = response.getResults();
        //取高亮
        Map<String, Map<String, List<String>>> highlightingMap = response.getHighlighting();

        //跟是否分页的设置无关,返回的是总的记录数
        System.out.println("总的查询数量:"+results.getNumFound());

        for(SolrDocument solrDocument:results){
            System.out.println("id:"+solrDocument.get("id"));
            System.out.println("item_sell_point:"+solrDocument.get("item_sell_point"));
            System.out.println("item_price:"+solrDocument.get("item_price"));
            System.out.println("item_category_name:"+solrDocument.get("item_category_name"));

            //取高亮
            Map<String, List<String>> map = highlightingMap.get(solrDocument.get("id"));
            List<String> list = map.get("item_title");
            if(list!=null && list.size()>0){
                System.out.println("item_title:"+list.get(0));
            }else{
                System.out.println("item_title:"+solrDocument.get("item_title"));
            }

            System.out.println("==============================");
        }
    }
}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值