Skip to content

Commit 670fb15

Browse files
authored
Merge branch 'main' into fix-indentation
2 parents 67f70e2 + 8ae8a10 commit 670fb15

File tree

5 files changed

+112
-21
lines changed

5 files changed

+112
-21
lines changed

docs/changelog/133064.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 133064
2+
summary: Mark LOOKUP JOIN as `ExecutesOn.Any` by default
3+
area: ES|QL
4+
type: bug
5+
issues: []
Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,65 @@
11
# Elasticsearch
22

3-
This section contains reference information for {{es}} and index management features.
3+
{{es}} is a distributed search and analytics engine, scalable data store, and vector database built on Apache Lucene. It’s optimized for speed and relevance on production-scale workloads. Use Elasticsearch to search, index, store, and analyze data of all shapes and sizes in near real time.
44

5-
To learn more about {{es}} features and how to get started, refer to the [{{es}}](docs-content://solutions/search.md) documentation.
5+
## Quick links
66

7-
For more details about query and scripting languages, check these sections:
8-
* [Query languages](../query-languages/index.md)
9-
* [Scripting languages](../scripting-languages/index.md)
7+
:::{dropdown} Useful links
108

11-
{{es}} also provides the following REST APIs:
9+
- [REST API Reference](./rest-apis/index.md)
10+
- [API Conventions](./rest-apis/api-conventions.md)
11+
- [Settings Reference](https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html)
12+
- [Breaking Changes](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html)
13+
- [Compatibility](./rest-apis/compatibility.md)
14+
- [Glossary](https://www.elastic.co/guide/en/elasticsearch/reference/current/glossary.html)
15+
- [Plugin Development](https://www.elastic.co/guide/en/elasticsearch/plugins/current/index.html)
16+
- [Supported Platforms](https://www.elastic.co/support/matrix#matrix_jvm)
17+
:::
1218

13-
* [{{es}} API](https://www.elastic.co/docs/api/doc/elasticsearch)
14-
* [{{es}} Serverless API](https://www.elastic.co/docs/api/doc/elasticsearch-serverless)
19+
## Setup and architecture
20+
21+
- [Set up Elasticsearch](docs-content://deploy-manage/deploy/self-managed/installing-elasticsearch.md)
22+
- [Secure the Elastic Stack](docs-content://deploy-manage/security.md)
23+
- [Upgrade Elasticsearch](docs-content://deploy-manage/upgrade/deployment-or-cluster.md)
24+
- [Set up a cluster for high availability](docs-content://deploy-manage/tools.md)
25+
- [Stack monitoring](docs-content://deploy-manage/monitor/stack-monitoring.md)
26+
- [Troubleshooting](docs-content://troubleshoot/elasticsearch.md)
27+
- [Optimizations](docs-content://deploy-manage/production-guidance/optimize-performance.md)
28+
29+
## Working with data
30+
31+
- [Adding data to Elasticsearch](docs-content://manage-data/ingest.md)
32+
- [Connectors](https://www.elastic.co/docs/reference/search-connectors)
33+
- [Web crawler](https://www.elastic.co/search-labs/blog/elastic-open-crawler-release)
34+
- [Data streams](docs-content://manage-data/data-store/data-streams.md)
35+
- [Ingest pipelines](docs-content://manage-data/ingest/transform-enrich/ingest-pipelines.md)
36+
- [Mapping](docs-content://manage-data/data-store/mapping.md)
37+
- [Data management](docs-content://manage-data/lifecycle.md)
38+
- [Downsampling](docs-content://manage-data/lifecycle.md)
39+
- [Snapshot and restore](docs-content://deploy-manage/tools/snapshot-and-restore.md)
40+
41+
## Search and analytics
42+
43+
{{es}} is the search and analytics engine that powers the {{stack}}.
44+
45+
- [Get started](docs-content://get-started/index.md)
46+
- [Learn how to search your data](docs-content://solutions/search/querying-for-search.md)
47+
- Query data programmatically: use query languages to run advanced search, filtering, or analytics
48+
- [Query DSL](docs-content://explore-analyze/query-filter/languages/querydsl.md): full JSON-based query language
49+
- [ES|QL](docs-content://explore-analyze/query-filter/languages/esql.md): fast, SQL-like language with piped syntax
50+
- [EQL](docs-content://explore-analyze/query-filter/languages/eql.md): for event-based time series data, such as logs, metrics, and traces
51+
- [SQL](docs-content://explore-analyze/query-filter/languages/sql.md): SQL-style queries on Elasticsearch data
52+
- [Search applications](docs-content://solutions/search/search-applications.md)
53+
- [Aggregations](docs-content://explore-analyze/query-filter/aggregations.md)
54+
- [Geospatial analysis](docs-content://explore-analyze/geospatial-analysis.md)
55+
- [Machine Learning](docs-content://explore-analyze/machine-learning.md)
56+
- [Alerting](docs-content://explore-analyze/alerts-cases.md)
57+
58+
## APIs and developer docs
59+
60+
- [REST APIs](https://www.elastic.co/docs/reference/elasticsearch/rest-apis)
61+
- [{{es}} Clients](https://www.elastic.co/docs/reference/elasticsearch-clients)
62+
- [Painless](https://www.elastic.co/docs/reference/scripting-languages/painless/painless)
63+
- [Plugins and integrations](https://www.elastic.co/docs/reference/elasticsearch/plugins)
64+
- [Search Labs](https://www.elastic.co/search-labs)
65+
- [Notebook examples](https://www.elastic.co/search-labs/tutorials/examples)

libs/core/src/test/java/org/elasticsearch/core/GlobTests.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void testMatchLiteral() {
3030
str = randomAlphanumericOfLength(randomIntBetween(1, 12));
3131
assertMatch(str, str);
3232

33-
str = randomAsciiString(randomIntBetween(1, 24), ch -> ch >= ' ' && ch <= '~' && ch != '*');
33+
str = randomAsciiStringNoAsterisks(randomIntBetween(1, 24));
3434
assertMatch(str, str);
3535
}
3636

@@ -67,7 +67,7 @@ public void testPrefixMatch() {
6767
assertNonMatch("123*", "abc123");
6868
assertNonMatch("123*", "abc123def");
6969

70-
var prefix = randomAsciiString(randomIntBetween(2, 12));
70+
var prefix = randomAsciiStringNoAsterisks(randomIntBetween(2, 12));
7171
var pattern = prefix + "*";
7272
assertMatch(pattern, prefix);
7373
assertMatch(pattern, prefix + randomAsciiString(randomIntBetween(1, 30)));
@@ -92,7 +92,7 @@ public void testSuffixMatch() {
9292
assertNonMatch("*123", "123abc");
9393
assertNonMatch("*123", "abc123def");
9494

95-
var suffix = randomAsciiString(randomIntBetween(2, 12));
95+
var suffix = randomAsciiStringNoAsterisks(randomIntBetween(2, 12));
9696
var pattern = "*" + suffix;
9797
assertMatch(pattern, suffix);
9898
assertMatch(pattern, randomAsciiString(randomIntBetween(1, 30)) + suffix);
@@ -114,7 +114,7 @@ public void testInfixStringMatch() {
114114
assertNonMatch("*123*", "12*");
115115
assertNonMatch("*123*", "1.2.3");
116116

117-
var infix = randomAsciiString(randomIntBetween(2, 12));
117+
var infix = randomAsciiStringNoAsterisks(randomIntBetween(2, 12));
118118
var pattern = "*" + infix + "*";
119119
assertMatch(pattern, infix);
120120
assertMatch(pattern, randomAsciiString(randomIntBetween(1, 30)) + infix + randomAsciiString(randomIntBetween(1, 30)));
@@ -138,8 +138,8 @@ public void testInfixAsteriskMatch() {
138138
assertMatch("123*321", "12345678987654321");
139139
assertNonMatch("123*321", "12321");
140140

141-
var prefix = randomAsciiString(randomIntBetween(2, 12));
142-
var suffix = randomAsciiString(randomIntBetween(2, 12));
141+
var prefix = randomAsciiStringNoAsterisks(randomIntBetween(2, 12));
142+
var suffix = randomAsciiStringNoAsterisks(randomIntBetween(2, 12));
143143
var pattern = prefix + "*" + suffix;
144144
assertMatch(pattern, prefix + suffix);
145145
assertMatch(pattern, prefix + randomAsciiString(randomIntBetween(1, 30)) + suffix);
@@ -180,6 +180,10 @@ private String randomAsciiString(int length) {
180180
return randomAsciiString(length, ch -> ch >= ' ' && ch <= '~');
181181
}
182182

183+
private String randomAsciiStringNoAsterisks(final int length) {
184+
return randomAsciiString(length, ch -> ch >= ' ' && ch <= '~' && ch != '*');
185+
}
186+
183187
private String randomAsciiString(int length, CharPredicate validCharacters) {
184188
StringBuilder str = new StringBuilder(length);
185189
nextChar: for (int i = 0; i < length; i++) {

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/logical/join/Join.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ public boolean isRemote() {
318318

319319
@Override
320320
public ExecuteLocation executesOn() {
321-
return isRemote ? ExecuteLocation.REMOTE : ExecuteLocation.COORDINATOR;
321+
return isRemote ? ExecuteLocation.REMOTE : ExecuteLocation.ANY;
322322
}
323323

324324
private void checkRemoteJoin(Failures failures) {

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/optimizer/OptimizerVerificationTests.java

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,16 +95,40 @@ public void testRemoteEnrichAfterCoordinatorOnlyPlans() {
9595

9696
String err;
9797

98+
// Remote enrich is ok after limit
9899
plan("""
99100
FROM test
101+
| LIMIT 10
100102
| EVAL language_code = languages
101103
| ENRICH _remote:languages ON language_code
102104
| STATS count(*) BY language_name
103105
""", analyzer);
104106

107+
// Remote enrich is ok after topn
108+
plan("""
109+
FROM test
110+
| EVAL language_code = languages
111+
| SORT languages
112+
| ENRICH _remote:languages ON language_code
113+
""", analyzer);
114+
plan("""
115+
FROM test
116+
| EVAL language_code = languages
117+
| SORT languages
118+
| LIMIT 2
119+
| ENRICH _remote:languages ON language_code
120+
""", analyzer);
121+
122+
// Remote enrich is ok before pipeline breakers
105123
plan("""
106124
FROM test
125+
| EVAL language_code = languages
126+
| ENRICH _remote:languages ON language_code
107127
| LIMIT 10
128+
""", analyzer);
129+
130+
plan("""
131+
FROM test
108132
| EVAL language_code = languages
109133
| ENRICH _remote:languages ON language_code
110134
| STATS count(*) BY language_name
@@ -118,6 +142,13 @@ public void testRemoteEnrichAfterCoordinatorOnlyPlans() {
118142
| LIMIT 10
119143
""", analyzer);
120144

145+
plan("""
146+
FROM test
147+
| EVAL language_code = languages
148+
| ENRICH _remote:languages ON language_code
149+
| SORT language_name
150+
""", analyzer);
151+
121152
err = error("""
122153
FROM test
123154
| EVAL language_code = languages
@@ -230,6 +261,9 @@ public void testRemoteEnrichAfterCoordinatorOnlyPlans() {
230261
assertThat(err, containsString("4:3: ENRICH with remote policy can't be executed after [CHANGE_POINT salary ON languages]@2:3"));
231262
}
232263

264+
/**
265+
* The validation should not trigger for remote enrich after a lookup join. Lookup joins can be executed anywhere.
266+
*/
233267
public void testRemoteEnrichAfterLookupJoin() {
234268
EnrichResolution enrichResolution = new EnrichResolution();
235269
loadEnrichPolicyResolution(
@@ -257,32 +291,29 @@ public void testRemoteEnrichAfterLookupJoin() {
257291
| %s
258292
""", lookupCommand), analyzer);
259293

260-
String err = error(Strings.format("""
294+
plan(Strings.format("""
261295
FROM test
262296
| EVAL language_code = languages
263297
| %s
264298
| ENRICH _remote:languages ON language_code
265299
""", lookupCommand), analyzer);
266-
assertThat(err, containsString("4:3: ENRICH with remote policy can't be executed after [" + lookupCommand + "]@3:3"));
267300

268-
err = error(Strings.format("""
301+
plan(Strings.format("""
269302
FROM test
270303
| EVAL language_code = languages
271304
| %s
272305
| ENRICH _remote:languages ON language_code
273306
| %s
274307
""", lookupCommand, lookupCommand), analyzer);
275-
assertThat(err, containsString("4:3: ENRICH with remote policy can't be executed after [" + lookupCommand + "]@3:3"));
276308

277-
err = error(Strings.format("""
309+
plan(Strings.format("""
278310
FROM test
279311
| EVAL language_code = languages
280312
| %s
281313
| EVAL x = 1
282314
| MV_EXPAND language_code
283315
| ENRICH _remote:languages ON language_code
284316
""", lookupCommand), analyzer);
285-
assertThat(err, containsString("6:3: ENRICH with remote policy can't be executed after [" + lookupCommand + "]@3:3"));
286317
}
287318

288319
public void testRemoteLookupJoinWithPipelineBreaker() {

0 commit comments

Comments
 (0)