|
23 | 23 | import java.util.Date; |
24 | 24 | import java.util.HashMap; |
25 | 25 | import java.util.HashSet; |
26 | | -import java.util.LinkedHashMap; |
27 | 26 | import java.util.List; |
28 | 27 | import java.util.Locale; |
29 | 28 | import java.util.Map; |
@@ -1368,84 +1367,49 @@ private void validateSort(int numDocs) throws Exception { |
1368 | 1367 | String sortStr = String.join(",", fieldWithOrderStrs); // sort : field1 asc, field2 desc |
1369 | 1368 | String fieldsStr = String.join(",", fieldStrs); // fl : field1, field2 |
1370 | 1369 |
|
1371 | | - String resp = |
1372 | | - h.query(req("q", "*:*", "qt", "/export", "fl", "id," + fieldsStr, "sort", sortStr)); |
1373 | | - HashMap respMap = mapper.readValue(resp, HashMap.class); |
1374 | | - List docs = (ArrayList) ((HashMap) respMap.get("response")).get("docs"); |
| 1370 | + List<?> exportDocs = |
| 1371 | + queryJsonReturnDocs( |
| 1372 | + req("q", "*:*", "qt", "/export", "fl", "id," + fieldsStr, "sort", sortStr)); |
| 1373 | + assertEquals(exportDocs.size(), numDocs); |
1375 | 1374 |
|
1376 | | - SolrQueryRequest selectReq = |
1377 | | - req( |
1378 | | - "q", |
1379 | | - "*:*", |
1380 | | - "qt", |
1381 | | - "/select", |
1382 | | - "fl", |
1383 | | - "id," + fieldsStr, |
1384 | | - "sort", |
1385 | | - sortStr, |
1386 | | - "rows", |
1387 | | - Integer.toString(numDocs), |
1388 | | - "wt", |
1389 | | - "json"); |
1390 | | - String response = h.query(selectReq); |
1391 | | - Map rsp = (Map) Utils.fromJSONString(response); |
1392 | | - List doclist = (List) (((Map) rsp.get("response")).get("docs")); |
1393 | | - |
1394 | | - assertEquals(docs.size(), numDocs); |
1395 | | - |
1396 | | - for (int i = 0; i < docs.size() - 1; i++) { // docs.. |
1397 | | - assertEquals( |
1398 | | - "Position:" + i + " has different id value", |
1399 | | - ((LinkedHashMap) doclist.get(i)).get("id"), |
1400 | | - String.valueOf(((HashMap<?, ?>) docs.get(i)).get("id"))); |
1401 | | - |
1402 | | - for (SortFields fieldSort : fieldSorts) { // fields .. |
1403 | | - String field = fieldSort.getField(); |
1404 | | - String sort = fieldSort.getSort(); |
1405 | | - String fieldVal1 = String.valueOf(((HashMap) docs.get(i)).get(field)); // 1st doc |
1406 | | - String fieldVal2 = String.valueOf(((HashMap) docs.get(i + 1)).get(field)); // 2nd obj |
1407 | | - if (fieldVal1.equals(fieldVal2)) { |
1408 | | - continue; |
1409 | | - } else { |
1410 | | - if (sort.equals("asc")) { |
1411 | | - if (field.equals("stringdv") |
1412 | | - || field.equals("field1_s_dv") |
1413 | | - || field.equals("datedv") |
1414 | | - || field.equals("booleandv")) { // use string comparator |
1415 | | - assertTrue(fieldVal1.compareTo(fieldVal2) < 0); |
1416 | | - } else if (field.equals("doubledv")) { |
1417 | | - assertTrue(Double.compare(Double.valueOf(fieldVal1), Double.valueOf(fieldVal2)) <= 0); |
1418 | | - } else if (field.equals("floatdv")) { |
1419 | | - assertTrue(Float.compare(Float.valueOf(fieldVal1), Float.valueOf(fieldVal2)) <= 0); |
1420 | | - } else if (field.equals("intdv") || "field2_i_p".equals(field)) { |
1421 | | - assertTrue( |
1422 | | - Integer.compare(Integer.valueOf(fieldVal1), Integer.valueOf(fieldVal2)) <= 0); |
1423 | | - } else if (field.equals("longdv") || field.equals("field3_l_p")) { |
1424 | | - assertTrue(Long.compare(Integer.valueOf(fieldVal1), Long.valueOf(fieldVal2)) <= 0); |
1425 | | - } |
1426 | | - } else { |
1427 | | - if (field.equals("stringdv") |
1428 | | - || field.equals("field1_s_dv") |
1429 | | - || field.equals("datedv") |
1430 | | - || field.equals("booleandv")) { // use string comparator |
1431 | | - assertTrue(fieldVal1.compareTo(fieldVal2) > 0); |
1432 | | - } else if (field.equals("doubledv")) { |
1433 | | - assertTrue(Double.compare(Double.valueOf(fieldVal1), Double.valueOf(fieldVal2)) >= 0); |
1434 | | - } else if (field.equals("floatdv")) { |
1435 | | - assertTrue(Float.compare(Float.valueOf(fieldVal1), Float.valueOf(fieldVal2)) >= 0); |
1436 | | - } else if (field.equals("intdv") || "field2_i_p".equals(field)) { |
1437 | | - assertTrue( |
1438 | | - Integer.compare(Integer.valueOf(fieldVal1), Integer.valueOf(fieldVal2)) >= 0); |
1439 | | - } else if (field.equals("longdv") || field.equals("field3_l_p")) { |
1440 | | - assertTrue(Long.compare(Integer.valueOf(fieldVal1), Long.valueOf(fieldVal2)) >= 0); |
1441 | | - } |
1442 | | - } |
1443 | | - break; |
1444 | | - } |
| 1375 | + // equivalent for /select |
| 1376 | + List<?> selectDocs = |
| 1377 | + queryJsonReturnDocs( |
| 1378 | + req( |
| 1379 | + "q", |
| 1380 | + "*:*", |
| 1381 | + "qt", |
| 1382 | + "/select", |
| 1383 | + "fl", |
| 1384 | + "id," + fieldsStr, |
| 1385 | + "sort", |
| 1386 | + sortStr, |
| 1387 | + "rows", |
| 1388 | + Integer.toString(numDocs), |
| 1389 | + "wt", |
| 1390 | + "json")); |
| 1391 | + |
| 1392 | + assertEquals(selectDocs.size(), numDocs); |
| 1393 | + |
| 1394 | + // check that both /select and /export return docs with the same values for the sorted fields |
| 1395 | + for (int i = 0; i < exportDocs.size(); i++) { |
| 1396 | + Map exportDoc = (Map) exportDocs.get(i); |
| 1397 | + Map selectDoc = (Map) selectDocs.get(i); |
| 1398 | + for (SortFields fieldSort : fieldSorts) { |
| 1399 | + String field = fieldSort.fieldName; |
| 1400 | + assertEquals( |
| 1401 | + "doc " + i + " differs for field " + field, exportDoc.get(field), selectDoc.get(field)); |
1445 | 1402 | } |
1446 | 1403 | } |
1447 | 1404 | } |
1448 | 1405 |
|
| 1406 | + @SuppressWarnings("rawtypes") |
| 1407 | + private List<?> queryJsonReturnDocs(SolrQueryRequest exportReq) throws Exception { |
| 1408 | + String respStr = h.query(exportReq); |
| 1409 | + Map respMap = mapper.readValue(respStr, Map.class); |
| 1410 | + return (List) ((Map) respMap.get("response")).get("docs"); |
| 1411 | + } |
| 1412 | + |
1449 | 1413 | private static class SortFields { |
1450 | 1414 | String fieldName; |
1451 | 1415 | String sortOrder; |
|
0 commit comments