solr在Java中使用

<!-- 配置SolrServer对象 -->
<!-- 单机版 -->
<bean id="httpSolrClient" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
        <constructor-arg name="baseURL" value="http://192.168.25.154:8080/solr"></constructor-arg>
</bean>

    @Autowired
    private HttpSolrClient httpSolrClient;
新加评论 评论标题:

文章评论

    查询参数

        2019-03-27    
    修改 删除
    //创建查询对象
    SolrQuery solrQuery = new SolrQuery();
    //设置查询条件
    solrQuery.setQuery("Pcount:数据库测试mvc");
    //设置分页
    solrQuery.setStart((page - 1) * rows);
    //设置返回数量
    solrQuery.setRows(rows);
    //设置返回域
    solrParams.addField("id");
    solrParams.addField("screen_name");
    和add效果相同
    query.setFields(newString[]{“name”,”age”});//只返回docs中name,age两个field。
    //设置排序
    solrQuery.addSort("id", SolrQuery.ORDER.desc);
    //设置默认搜素域
    solrQuery.set("df", "Pcount");
    
    //设置高亮显示
    solrQuery.setHighlight(true);
    solrQuery.addHighlightField("Pcount");
    solrQuery.setHighlightSimplePre("<em style=\"color:red\">");
    solrQuery.setHighlightSimplePost("</em>");
    //根据查询条件查询索引库
    QueryResponse queryResponse = solrClient.query(coreName,query);
    
    
    //通过MapSolrParams方式传递参数
    Map<String, String> queryParamMap = new HashMap<>();
    queryParamMap.put("q", "*:*");//表示查询条件
    queryParamMap.put("fl", "id,Ptitle");//要显示的内容
    queryParamMap.put("sort", "id asc");//排序方式
    MapSolrParams solrParams = new MapSolrParams(queryParamMap);
    QueryResponse response = solrClient.query(coreName, solrParams);

    处理查询结果

        2019-03-27    
    修改 删除
    //处理查询结果
    SolrDocumentList solrDocumentList = response.getResults();
    solrDocumentList.getNumFound();//获取查到的文档数目
    for (SolrDocument document : solrDocumentList) {
        //获取某文档某一参数值
        String id = (String) document.getFirstValue("id");
    }
    
    //商品列表
    List<ProductInfo> itemList = new ArrayList<>();
    //取高亮显示
    Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
    //取商品列表
    for (SolrDocument solrDocument : solrDocumentList) {
        //获取循环内该文档的Pcount字段
        List<String> list = highlighting.get(solrDocument.get("id")).get("Pcount");
    
        if (list != null && list.size()>0) {
            title = list.get(0); //获取高亮字段
        } else {
            //没有高亮字段(该字段没有匹配)
        }
    }

    添加

        2019-03-27    
    修改 删除
    //新增
    SolrInputDocument inputDocument = new SolrInputDocument();
    inputDocument.addField("sourceType", "test");
    inputDocument.addField("id", "test_big_data");
    // 执行添加, 如果id相同,则执行更新操作
    UpdateResponse add = solrClient.add(coreName, inputDocument);
    //添加一个SolrInputDocument列表
    //solrClient.add(coreName, docs)
    //提交添加/更新
    solrClient.commit(coreName);

    删除

        2019-03-27    
    修改 删除
    //删除(方式一:基于查询)
    solrClient.deleteByQuery(coreName,"*:*");
    solrClient.commit(coreName);
    //删除(方式二:基于唯一id)
    solrClient.deleteById(coreName,"6");
    solrClient.commit(coreName);

    通过Java对象操作

        2019-03-29    
    修改 删除
    根据对象新增
    //java对象
    public static class Info {
        @Field
        public String id;
        @Field
        public String screen_name;
    
        public Info(String id, String screen_name) {
            this.id = id;
            this.screen_name = screen_name;
        }
    }
    //新增数据
    Info info = new Info("4", "lala");
    solrClient.addBean(coreName, info);
    solrClient.commit(coreName, true, true); 
    List<Info> infoList =new ArrayList<Info>();
    solrClient.addBeans(coreName, info);
    solrClient.commit(coreName, true, true); 
    //查询数据
    QueryResponse response = solrClient.query(coreName, solrParams);
    List<Info> beans = response.getBeans(Info.class);
评论列表
查询参数
处理查询结果
添加
删除
通过Java对象操作