solr group group query

Application scenarios:

Solr is a warehouse for data storage, which is convenient for us to find quickly. When an instance core has a certain relationship with another instance core, just like our library table, there is a field indicating that the two tables are related.

group can solve such a query and return some properties of the main table.

code show as below:

//group statistics

public static List<Map<String,Object>> searchGroup() {

    List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();

    SolrClient client = getSolrClient();

    SolrQuery query = new SolrQuery();

    try {

        String[] orderParam = new String[]{"solrField_relationId"};

        query.setParam("group", true);

query.setParam("group.field", orderParam);  

query.setParam("group.limit", "1");

query.setParam("group.offset", "0");

query.setParam("group.ngroups", true);

query.set("q", "solrField_s_400cf9863525446ab637e1c47c9af199:*杨*");

query.setStart(0);

query.setRows(10);

QueryResponse response = client.query(query);

if (response != null) {  

    GroupResponse groupResponse = response.getGroupResponse();

    if(groupResponse != null) {      

List<GroupCommand> groupList = groupResponse.getValues();

for(GroupCommand groupCommand : groupList) {   

   List<Group> groups = groupCommand.getValues();

   System.out .println ( "Total number:" + groupCommand .getNGroups(). longValue ());

   for (int i = 0; i < groups.size(); i++) {

      Map<String,Object> map = new HashMap<String,Object>();

      SolrDocument solrDocument = groups.get(i).getResult().get(0);

      map.put("id", solrDocument.get("id"));    

                      map.put("solrField_relationId", solrDocument.get("solrField_relationId"));

 map.put("solrField_s_400cf9863525446ab637e1c47c9af199", solrDocument.get("solrField_s_400cf9863525446ab637e1c47c9af199"));


map.put("solrField_s_3053005c93bd43f0817dd1d24ffb339a", solrDocument.get("solrField_s_3053005c93bd43f0817dd1d24ffb339a"));

    resultList.add(map);

}

    }

}

}

}catch(Exception ex) {

ex.printStackTrace();

}

    return resultList;

    }

// query method

List<Map<String,Object>> list = searchGroup();

for (Iterator iterator = list.iterator(); iterator.hasNext();) {

    Map<String, Object> map = (Map<String, Object>) iterator.next();

    System.out.println(map);

}

Parameter explanation

query .setParam( "group"true ); means enable group query

query .setParam( "group.field"orderParam );     Association

query .setParam( "group.limit""1" ); limit and offset control the offset value, because one piece of data in the master table corresponds to multiple pieces of data in the slave tables

query.setParam("group.offset""0");

query.setParam("group.ngroups"true);        

This is related to the total number of prints. If it is not enabled, System.out .println ( "Total number:" + groupCommand .getNGroups(). longValue ()); This line of code will report an error 

query .set( "q" "solrField_s_400cf9863525446ab637e1c47c9af199:*yang*" ); fuzzy matching conditions

query .setStart(0); the actual value of pagination

query .setRows(10); the number of rows per page


print result:

Total number: 3034

{solrField_relationId=708988, solrField_s_400cf9863525446ab637e1c47c9af199=杨传华, id=23901, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}

{solrField_relationId=711518, solrField_s_400cf9863525446ab637e1c47c9af199=Mr. Yang, id=24280, solrField_s_3053005c93bd43f0817dd1d24ffb339a=male}

{solrField_relationId=711805, solrField_s_400cf9863525446ab637e1c47c9af199=杨潇, id=24316, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}

{solrField_relationId=712140, solrField_s_400cf9863525446ab637e1c47c9af199=谭杨, id=24346, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}

{solrField_relationId=678355, solrField_s_400cf9863525446ab637e1c47c9af199=杨启超, id=19831, solrField_s_3053005c93bd43f0817dd1d24ffb339a=女}

{solrField_relationId=678531, solrField_s_400cf9863525446ab637e1c47c9af199=杨广华, id=19857, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}

{solrField_relationId=679025, solrField_s_400cf9863525446ab637e1c47c9af199=杨冰, id=20061, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}

{solrField_relationId=679640, solrField_s_400cf9863525446ab637e1c47c9af199=杨小锁, id=20006, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}

{solrField_relationId=679678, solrField_s_400cf9863525446ab637e1c47c9af199=肖杨, id=20011, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}

{solrField_relationId=680127, solrField_s_400cf9863525446ab637e1c47c9af199=杨春生, id=20079, solrField_s_3053005c93bd43f0817dd1d24ffb339a=男}



Summary: There is a very important piece of code in it, which is to convert the result of the query into SolrDocument  solrDocument  =  groups .get( i ).getResult().get(0);

Only the result is converted into SolrDocument, and the rest are believed to be handled well by everyone.



Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325854913&siteId=291194637