|
43 | 43 | import org.apache.lucene.util.packed.PackedInts; |
44 | 44 | import org.elasticsearch.core.IOUtils; |
45 | 45 | import org.elasticsearch.index.codec.tsdb.TSDBDocValuesEncoder; |
| 46 | +import org.elasticsearch.index.mapper.BlockDocValuesReader; |
46 | 47 | import org.elasticsearch.index.mapper.BlockLoader; |
47 | 48 |
|
48 | 49 | import java.io.IOException; |
@@ -1082,6 +1083,21 @@ public void loadDoc(BlockLoader.IntBuilder builder, int docId) throws IOExceptio |
1082 | 1083 | builder.appendInt(0); |
1083 | 1084 | } |
1084 | 1085 |
|
| 1086 | + @Override |
| 1087 | + public void loadBlock(BlockLoader.DoubleBuilder builder, BlockLoader.Docs docs, BlockDocValuesReader.ToDouble toDouble) |
| 1088 | + throws IOException { |
| 1089 | + double value = toDouble.convert(0L); |
| 1090 | + for (int i = 0; i < docs.count(); i++) { |
| 1091 | + builder.appendDouble(value); |
| 1092 | + } |
| 1093 | + } |
| 1094 | + |
| 1095 | + @Override |
| 1096 | + public void loadDoc(BlockLoader.DoubleBuilder builder, int docId, BlockDocValuesReader.ToDouble toDouble) |
| 1097 | + throws IOException { |
| 1098 | + builder.appendDouble(toDouble.convert(0L)); |
| 1099 | + } |
| 1100 | + |
1085 | 1101 | @Override |
1086 | 1102 | public int docID() { |
1087 | 1103 | return doc; |
@@ -1191,6 +1207,29 @@ public void loadDoc(BlockLoader.IntBuilder builder, int docId) throws IOExceptio |
1191 | 1207 | builder.appendNull(); |
1192 | 1208 | } |
1193 | 1209 | } |
| 1210 | + |
| 1211 | + @Override |
| 1212 | + public void loadBlock(BlockLoader.DoubleBuilder builder, BlockLoader.Docs docs, BlockDocValuesReader.ToDouble toDouble) |
| 1213 | + throws IOException { |
| 1214 | + double value = toDouble.convert(0L); |
| 1215 | + for (int i = 0; i < docs.count(); i++) { |
| 1216 | + if (disi.advanceExact(docs.get(i))) { |
| 1217 | + builder.appendDouble(value); |
| 1218 | + } else { |
| 1219 | + builder.appendNull(); |
| 1220 | + } |
| 1221 | + } |
| 1222 | + } |
| 1223 | + |
| 1224 | + @Override |
| 1225 | + public void loadDoc(BlockLoader.DoubleBuilder builder, int docId, BlockDocValuesReader.ToDouble toDouble) |
| 1226 | + throws IOException { |
| 1227 | + if (disi.advanceExact(docId)) { |
| 1228 | + builder.appendDouble(toDouble.convert(0L)); |
| 1229 | + } else { |
| 1230 | + builder.appendNull(); |
| 1231 | + } |
| 1232 | + } |
1194 | 1233 | }; |
1195 | 1234 | } |
1196 | 1235 | } |
@@ -1340,6 +1379,27 @@ public void loadDoc(BlockLoader.IntBuilder builder, int docId) throws IOExceptio |
1340 | 1379 | int value = Math.toIntExact(currentBlock[blockInIndex]); |
1341 | 1380 | builder.appendInt(value); |
1342 | 1381 | } |
| 1382 | + |
| 1383 | + @Override |
| 1384 | + public void loadBlock(BlockLoader.DoubleBuilder builder, BlockLoader.Docs docs, BlockDocValuesReader.ToDouble toDouble) |
| 1385 | + throws IOException { |
| 1386 | + for (int i = 0; i < docs.count(); i++) { |
| 1387 | + doc = docs.get(i); |
| 1388 | + builder.appendDouble(toDouble.convert(longValue())); |
| 1389 | + } |
| 1390 | + } |
| 1391 | + |
| 1392 | + @Override |
| 1393 | + public void loadDoc(BlockLoader.DoubleBuilder builder, int docId, BlockDocValuesReader.ToDouble toDouble) |
| 1394 | + throws IOException { |
| 1395 | + doc = docId; |
| 1396 | + |
| 1397 | + int blockIndex = docId >>> ES819TSDBDocValuesFormat.NUMERIC_BLOCK_SHIFT; |
| 1398 | + int blockInIndex = docId & ES819TSDBDocValuesFormat.NUMERIC_BLOCK_MASK; |
| 1399 | + loadCurrentBlock(blockIndex); |
| 1400 | + double value = toDouble.convert(currentBlock[blockInIndex]); |
| 1401 | + builder.appendDouble(value); |
| 1402 | + } |
1343 | 1403 | }; |
1344 | 1404 | } else { |
1345 | 1405 | final IndexedDISI disi = new IndexedDISI( |
@@ -1449,6 +1509,33 @@ public void loadDoc(BlockLoader.IntBuilder builder, int docId) throws IOExceptio |
1449 | 1509 | builder.appendNull(); |
1450 | 1510 | } |
1451 | 1511 | } |
| 1512 | + |
| 1513 | + @Override |
| 1514 | + public void loadBlock(BlockLoader.DoubleBuilder builder, BlockLoader.Docs docs, BlockDocValuesReader.ToDouble toDouble) |
| 1515 | + throws IOException { |
| 1516 | + // TODO: collect all doc ids for current block and then append values to builder? |
| 1517 | + |
| 1518 | + for (int i = 0; i < docs.count(); i++) { |
| 1519 | + int docId = docs.get(i); |
| 1520 | + if (disi.advanceExact(docId)) { |
| 1521 | + double value = toDouble.convert(longValue()); |
| 1522 | + builder.appendDouble(value); |
| 1523 | + } else { |
| 1524 | + builder.appendNull(); |
| 1525 | + } |
| 1526 | + } |
| 1527 | + } |
| 1528 | + |
| 1529 | + @Override |
| 1530 | + public void loadDoc(BlockLoader.DoubleBuilder builder, int docId, BlockDocValuesReader.ToDouble toDouble) |
| 1531 | + throws IOException { |
| 1532 | + if (disi.advanceExact(docId)) { |
| 1533 | + double value = toDouble.convert(longValue()); |
| 1534 | + builder.appendDouble(value); |
| 1535 | + } else { |
| 1536 | + builder.appendNull(); |
| 1537 | + } |
| 1538 | + } |
1452 | 1539 | }; |
1453 | 1540 | } |
1454 | 1541 | } |
@@ -1629,6 +1716,46 @@ public void loadDoc(BlockLoader.IntBuilder builder, int docId) throws IOExceptio |
1629 | 1716 | builder.endPositionEntry(); |
1630 | 1717 | } |
1631 | 1718 | } |
| 1719 | + |
| 1720 | + @Override |
| 1721 | + public void loadBlock(BlockLoader.DoubleBuilder builder, BlockLoader.Docs docs, BlockDocValuesReader.ToDouble toDouble) |
| 1722 | + throws IOException { |
| 1723 | + for (int i = 0; i < docs.count(); i++) { |
| 1724 | + doc = docs.get(i); |
| 1725 | + start = addresses.get(doc); |
| 1726 | + end = addresses.get(doc + 1L); |
| 1727 | + count = (int) (end - start); |
| 1728 | + |
| 1729 | + if (count == 1) { |
| 1730 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1731 | + } else { |
| 1732 | + builder.beginPositionEntry(); |
| 1733 | + for (int v = 0; v < count; v++) { |
| 1734 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1735 | + } |
| 1736 | + builder.endPositionEntry(); |
| 1737 | + } |
| 1738 | + } |
| 1739 | + } |
| 1740 | + |
| 1741 | + @Override |
| 1742 | + public void loadDoc(BlockLoader.DoubleBuilder builder, int docId, BlockDocValuesReader.ToDouble toDouble) |
| 1743 | + throws IOException { |
| 1744 | + doc = docId; |
| 1745 | + start = addresses.get(docId); |
| 1746 | + end = addresses.get(docId + 1L); |
| 1747 | + count = (int) (end - start); |
| 1748 | + |
| 1749 | + if (count == 1) { |
| 1750 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1751 | + } else { |
| 1752 | + builder.beginPositionEntry(); |
| 1753 | + for (int v = 0; v < count; v++) { |
| 1754 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1755 | + } |
| 1756 | + builder.endPositionEntry(); |
| 1757 | + } |
| 1758 | + } |
1632 | 1759 | }; |
1633 | 1760 | } else { |
1634 | 1761 | // sparse |
@@ -1760,6 +1887,46 @@ public void loadDoc(BlockLoader.IntBuilder builder, int docId) throws IOExceptio |
1760 | 1887 | } |
1761 | 1888 | } |
1762 | 1889 |
|
| 1890 | + @Override |
| 1891 | + public void loadBlock(BlockLoader.DoubleBuilder builder, BlockLoader.Docs docs, BlockDocValuesReader.ToDouble toDouble) |
| 1892 | + throws IOException { |
| 1893 | + for (int i = 0; i < docs.count(); i++) { |
| 1894 | + if (disi.advanceExact(docs.get(i))) { |
| 1895 | + set(); |
| 1896 | + if (count == 1) { |
| 1897 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1898 | + } else { |
| 1899 | + builder.beginPositionEntry(); |
| 1900 | + for (int v = 0; v < count; v++) { |
| 1901 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1902 | + } |
| 1903 | + builder.endPositionEntry(); |
| 1904 | + } |
| 1905 | + } else { |
| 1906 | + builder.appendNull(); |
| 1907 | + } |
| 1908 | + } |
| 1909 | + } |
| 1910 | + |
| 1911 | + @Override |
| 1912 | + public void loadDoc(BlockLoader.DoubleBuilder builder, int docId, BlockDocValuesReader.ToDouble toDouble) |
| 1913 | + throws IOException { |
| 1914 | + if (disi.advanceExact(docId)) { |
| 1915 | + set(); |
| 1916 | + if (count == 1) { |
| 1917 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1918 | + } else { |
| 1919 | + builder.beginPositionEntry(); |
| 1920 | + for (int v = 0; v < count; v++) { |
| 1921 | + builder.appendDouble(toDouble.convert(nextValue())); |
| 1922 | + } |
| 1923 | + builder.endPositionEntry(); |
| 1924 | + } |
| 1925 | + } else { |
| 1926 | + builder.appendNull(); |
| 1927 | + } |
| 1928 | + } |
| 1929 | + |
1763 | 1930 | @Override |
1764 | 1931 | public int docValueCount() { |
1765 | 1932 | set(); |
|
0 commit comments