Skip to content

Commit e4fabaf

Browse files
Merge branch 'main' into inheritance-yeay
2 parents 01920ba + eed650e commit e4fabaf

File tree

5 files changed

+39
-12
lines changed

5 files changed

+39
-12
lines changed

docs/changelog/119265.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 119265
2+
summary: Fix `AbstractShapeGeometryFieldMapperTests`
3+
area: "ES|QL"
4+
type: bug
5+
issues:
6+
- 119201

docs/reference/ingest/enrich.asciidoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ and <<update-enrich-policies, update your enrich policies>>.
9898
[IMPORTANT]
9999
====
100100
The enrich processor performs several operations and may impact the speed of
101-
your ingest pipeline.
101+
your ingest pipeline. We recommend <<modules-node,node roles>> co-locating
102+
ingest and data roles to minimize remote search operations.
102103
103104
We strongly recommend testing and benchmarking your enrich processors
104105
before deploying them in production.

server/src/main/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,10 @@ public void read(int docId, BlockLoader.StoredFields storedFields, BlockLoader.B
124124

125125
private void read(BinaryDocValues binaryDocValues, int doc, GeometryDocValueReader reader, BytesRefBuilder builder)
126126
throws IOException {
127-
binaryDocValues.advanceExact(doc);
127+
if (binaryDocValues.advanceExact(doc) == false) {
128+
builder.appendNull();
129+
return;
130+
}
128131
reader.reset(binaryDocValues.binaryValue());
129132
var extent = reader.getExtent();
130133
// This is rather silly: an extent is already encoded as ints, but we convert it to Rectangle to

server/src/test/java/org/elasticsearch/index/mapper/AbstractShapeGeometryFieldMapperTests.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import org.apache.lucene.document.Document;
1313
import org.apache.lucene.index.DirectoryReader;
14-
import org.apache.lucene.index.LeafReaderContext;
14+
import org.apache.lucene.index.LeafReader;
1515
import org.apache.lucene.store.Directory;
1616
import org.apache.lucene.tests.index.RandomIndexWriter;
1717
import org.apache.lucene.util.BytesRef;
@@ -30,6 +30,7 @@
3030
import org.elasticsearch.test.hamcrest.WellKnownBinaryBytesRefMatcher;
3131

3232
import java.io.IOException;
33+
import java.util.ArrayList;
3334
import java.util.Optional;
3435
import java.util.function.Function;
3536
import java.util.function.Supplier;
@@ -61,7 +62,7 @@ private void testBoundsBlockLoaderAux(
6162
Function<String, ShapeIndexer> indexerFactory,
6263
Function<Geometry, Optional<Rectangle>> visitor
6364
) throws IOException {
64-
var geometries = IntStream.range(0, 20).mapToObj(i -> generator.get()).toList();
65+
var geometries = IntStream.range(0, 50).mapToObj(i -> generator.get()).toList();
6566
var loader = new AbstractShapeGeometryFieldMapper.AbstractShapeGeometryFieldType.BoundsBlockLoader("field", encoder);
6667
try (Directory directory = newDirectory()) {
6768
try (var iw = new RandomIndexWriter(random(), directory)) {
@@ -73,23 +74,39 @@ private void testBoundsBlockLoaderAux(
7374
iw.addDocument(doc);
7475
}
7576
}
76-
var indices = IntStream.range(0, geometries.size() / 2).map(x -> x * 2).toArray();
77+
// We specifically check just the even indices, to verify the loader can skip documents correctly.
78+
var evenIndices = evenArray(geometries.size());
7779
try (DirectoryReader reader = DirectoryReader.open(directory)) {
78-
LeafReaderContext ctx = reader.leaves().get(0);
79-
TestBlock block = (TestBlock) loader.reader(ctx).read(TestBlock.factory(ctx.reader().numDocs()), TestBlock.docs(indices));
80-
for (int i = 0; i < indices.length; i++) {
81-
var idx = indices[i];
80+
var byteRefResults = new ArrayList<BytesRef>();
81+
for (var leaf : reader.leaves()) {
82+
LeafReader leafReader = leaf.reader();
83+
int numDocs = leafReader.numDocs();
84+
try (
85+
TestBlock block = (TestBlock) loader.reader(leaf)
86+
.read(TestBlock.factory(leafReader.numDocs()), TestBlock.docs(evenArray(numDocs)))
87+
) {
88+
for (int i = 0; i < block.size(); i++) {
89+
byteRefResults.add((BytesRef) block.get(i));
90+
}
91+
}
92+
}
93+
for (int i = 0; i < evenIndices.length; i++) {
94+
var idx = evenIndices[i];
8295
var geometry = geometries.get(idx);
8396
var geoString = geometry.toString();
8497
var geometryString = geoString.length() > 200 ? geoString.substring(0, 200) + "..." : geoString;
8598
Rectangle r = visitor.apply(geometry).get();
8699
assertThat(
87100
Strings.format("geometries[%d] ('%s') wasn't extracted correctly", idx, geometryString),
88-
(BytesRef) block.get(i),
101+
byteRefResults.get(i),
89102
WellKnownBinaryBytesRefMatcher.encodes(RectangleMatcher.closeToFloat(r, 1e-3, encoder))
90103
);
91104
}
92105
}
93106
}
94107
}
108+
109+
private static int[] evenArray(int maxIndex) {
110+
return IntStream.range(0, maxIndex / 2).map(x -> x * 2).toArray();
111+
}
95112
}

x-pack/plugin/esql/qa/testFixtures/src/main/resources/string.csv-spec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,7 +1317,7 @@ emp_no:integer | first_name:keyword
13171317

13181318
equalsNullToUpperFolded
13191319
from employees
1320-
| where to_upper(first_name) == null::keyword
1320+
| where to_upper(first_name) == to_string(null)
13211321
| keep emp_no, first_name
13221322
;
13231323

@@ -1335,7 +1335,7 @@ emp_no:integer | first_name:keyword
13351335

13361336
notEqualsNullToUpperFolded
13371337
from employees
1338-
| where to_upper(first_name) != null::keyword
1338+
| where to_upper(first_name) != to_string(null)
13391339
| keep emp_no, first_name
13401340
;
13411341

0 commit comments

Comments
 (0)