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.