|
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