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

  • 作者: 凯哥Java(公众号:凯哥Java)
  • Solr
  • 时间:2022-02-08 17:45
  • 6042人已阅读
简介 在solr查询的时候,我们会看到q、fq、df等等,这些字段都是什么意思呢?本文将用代码介绍

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

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

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("==============================");
        }
    }
}


TopTop