solrJ(bean)的使用

package solr;


import java.io.IOException;
import java.util.List;
import java.util.Map;


import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.Group;
import org.apache.solr.client.solrj.response.GroupCommand;
import org.apache.solr.client.solrj.response.GroupResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.FacetField.Count;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.params.GroupParams;
import org.junit.Test;


public class TestFoods {


    static String urlString = "http://localhost:8080/solr/core2";


    static SolrClient solr;
    static {
        solr = new HttpSolrClient(urlString);
    }


    @Test
    public void write() throws IOException, SolrServerException {
        Foods foods = new Foods();
        foods.setId("2");
        foods.setFoodId(1);
        foods.setFoodName("虾仁炒蛋");
        foods.setPrice(10);
        foods.setTypeName("粤菜");
        //添加到索引库
        solr.addBean(foods);
        solr.commit();
        solr.close();
    }


    @Test
    public void read() throws SolrServerException, IOException {
        SolrQuery sq=new SolrQuery();  
        sq.setQuery("*:*");  
        //过滤
        sq.setFilterQueries("foodName:炒蛋");
        //排序
        sq.setSort("foodName",ORDER.desc);
        //分页
        sq.setStart(0);
        sq.setRows(2);
        QueryResponse query = solr.query(sq);
        //获取查询的数据
        List<Foods> beans = query.getBeans(Foods.class);
        for (Foods foods : beans) {
                System.out.println(foods.getFoodName()+":"+foods.getTypeName());
        }
    }
    @Test
    public void readHighlighting() throws SolrServerException, IOException {
        SolrQuery sq=new SolrQuery();  
        sq.setQuery("foodName:炒蛋");  
        //排序
        sq.setSort("foodName",ORDER.desc);
        //分页
        sq.setStart(0);
        sq.setRows(2);
        //高亮
        //是否高亮
        sq.setHighlight(true);
        //指定高亮的条件
        sq.addHighlightField("foodName");
        sq.setHighlightSimplePre("<font color=red>");
        sq.setHighlightSimplePost("</font>");
      //对查询的条件进行绑定
        QueryResponse query = solr.query(sq);
        //获取查询的数据
        List<Foods> beans = query.getBeans(Foods.class);
        //获取高亮的数据
        Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();
        for (Foods foods : beans) {
            Map<String, List<String>> map = highlighting.get(foods.getId());
            //获取高亮的条件获取数据
            List<String> list = map.get("foodName");
            String hlString=list.get(0);
            System.out.println(hlString);
        }
    }
    
    @Test
    public void deleteById() throws SolrServerException, IOException {
        // 根据id来删除数据
        solr.deleteById("1");
        solr.commit();
        solr.close();
    }


    @Test
    public void deleteByCondition() throws SolrServerException, IOException {
        // 根据条件来删除数据
        solr.deleteByQuery("foodName:青椒");
        solr.commit();
        solr.close();
    }


    @Test
    public void facet() throws SolrServerException, IOException {
        SolrQuery solrQuery = new SolrQuery("foodName:炒蛋");
        solrQuery.setFacet(true); // 开启分类
        solrQuery.setRows(0);
        solrQuery.addFacetField("typeName"); // 按字段分类 相同的归于一类
        solrQuery.setFacetLimit(10);// 限制facet返回的数量
        solrQuery.setFacetMissing(false);// 不统计null的值
        solrQuery.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示
        // solrQuery.setFacetSort("count asc"); //根据 count 数量 升序和降序 也可以根据索引
        // 默认是降序
        QueryResponse query = solr.query(solrQuery); // 对查询的条件进行绑定
        // System.out.println("查询时间:" + query.getQTime());
        List<FacetField> facets = query.getFacetFields();// 返回的facet列表
        for (FacetField facet : facets) {
            System.out.println(facet.getName());// 获取分组的条件--typeName
            List<Count> counts = facet.getValues();
            for (Count count : counts) {
                // 打印分组的结果和数量
                System.out.println(count.getName() + ":" + count.getCount());
            }
        }
        solr.close();
    }


    @Test
    public void GroupFieldQuery() throws Exception {
        SolrQuery solrQuery = new SolrQuery("foodName:炒蛋");
        // 开启group功能
        solrQuery.setParam(GroupParams.GROUP, true);
        // 指定group条件
        solrQuery.setParam(GroupParams.GROUP_FIELD, "typeName");
        // solrQuery.setParam("group.ngroups", true); --开启分组统计
        // 设置获取的数据数量,默认只获取分组中的第一条
        solrQuery.setParam(GroupParams.GROUP_LIMIT, "5");
        // 分页
        solrQuery.setStart(0);
        solrQuery.setRows(5);
        QueryResponse query = solr.query(solrQuery);
        GroupResponse groupResponse = query.getGroupResponse();
        List<GroupCommand> groupList = groupResponse.getValues();
        for (GroupCommand groupCommand : groupList) {
            System.out.println(groupCommand.getName()); // 获取group的条件
            List<Group> groups = groupCommand.getValues();
            for (Group group : groups) {
                
                SolrDocumentList results = group.getResult();
                // System.out.println(group.getGroupValue()+"-------"+results.size());
                // 获取group的结果和数量
                System.out.println(group.getGroupValue() + "====" + group.getResult().getNumFound());
                for (SolrDocument doc : results) {
                    // 获取group后的数据内容,可以获取到document中的所有属性(field)
                    System.out.println(doc.getFieldValue("foodName") + ":" + doc.getFieldValue("typeName") + ":" + doc.getFieldValue("price"));
                }
            }
        }
        solr.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值