Skip to content

Commit ff34cff

Browse files
authored
Merge pull request #34 from SOFTNETWORK-APP/fix/repl
- Return all requested fields in their original SQL SELECT order - Flatten inner hits arrays into individual rows. Each inner hit element produces its own row with parent fields duplicated. Recursive for multi-level nesting
2 parents eaece3d + 4ea186d commit ff34cff

26 files changed

Lines changed: 687 additions & 217 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ es8/testkit
1717
es9/bridge
1818
es9/testkit
1919
testkit/target*
20-
*.sc
20+
*.sc
21+
_bmad*
22+
docker/data

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ ThisBuild / organization := "app.softnetwork"
2020

2121
name := "softclient4es"
2222

23-
ThisBuild / version := "0.16.1"
23+
ThisBuild / version := "0.17.0"
2424

2525
ThisBuild / scalaVersion := scala213
2626

core/src/main/scala/app/softnetwork/elastic/client/AggregateApi.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ trait SingleValueAggregateApi
128128
}
129129
}
130130
// Execute the search
131+
implicit val context: ConversionContext = NativeContext
131132
search(sqlQuery)
132133
.flatMap { response =>
133134
val results = response.results

core/src/main/scala/app/softnetwork/elastic/client/ElasticClientDelegator.scala

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
248248
override def loadSchema(index: String): ElasticResult[Schema] =
249249
delegate.loadSchema(index)
250250

251+
override def invalidateSchema(index: String): Unit = delegate.invalidateSchema(index)
252+
override def invalidateAllSchemas(): Unit = delegate.invalidateAllSchemas()
253+
251254
override private[client] def executeCreateIndex(
252255
index: String,
253256
settings: String,
@@ -1115,7 +1118,9 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
11151118
* @return
11161119
* the Elasticsearch response
11171120
*/
1118-
override def search(statement: SearchStatement): ElasticResult[ElasticResponse] =
1121+
override def search(statement: SearchStatement)(implicit
1122+
context: ConversionContext
1123+
): ElasticResult[ElasticResponse] =
11191124
delegate.search(statement)
11201125

11211126
/** Search for documents / aggregations matching the Elasticsearch query.
@@ -1132,9 +1137,11 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
11321137
override def singleSearch(
11331138
elasticQuery: ElasticQuery,
11341139
fieldAliases: ListMap[String, String],
1135-
aggregations: ListMap[String, SQLAggregation]
1136-
): ElasticResult[ElasticResponse] =
1137-
delegate.singleSearch(elasticQuery, fieldAliases, aggregations)
1140+
aggregations: ListMap[String, SQLAggregation],
1141+
fields: Seq[String] = Seq.empty,
1142+
nestedHits: Map[String, Seq[(String, String)]] = Map.empty
1143+
)(implicit context: ConversionContext): ElasticResult[ElasticResponse] =
1144+
delegate.singleSearch(elasticQuery, fieldAliases, aggregations, fields, nestedHits)
11381145

11391146
/** Multi-search with Elasticsearch queries.
11401147
*
@@ -1150,9 +1157,11 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
11501157
override def multiSearch(
11511158
elasticQueries: ElasticQueries,
11521159
fieldAliases: ListMap[String, String],
1153-
aggregations: ListMap[String, SQLAggregation]
1154-
): ElasticResult[ElasticResponse] =
1155-
delegate.multiSearch(elasticQueries, fieldAliases, aggregations)
1160+
aggregations: ListMap[String, SQLAggregation],
1161+
fields: Seq[String] = Seq.empty,
1162+
nestedHits: Map[String, Seq[(String, String)]] = Map.empty
1163+
)(implicit context: ConversionContext): ElasticResult[ElasticResponse] =
1164+
delegate.multiSearch(elasticQueries, fieldAliases, aggregations, fields, nestedHits)
11561165

11571166
/** Asynchronous search for documents / aggregations matching the SQL query.
11581167
*
@@ -1162,7 +1171,8 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
11621171
* a Future containing the Elasticsearch response
11631172
*/
11641173
override def searchAsync(statement: SearchStatement)(implicit
1165-
ec: ExecutionContext
1174+
ec: ExecutionContext,
1175+
context: ConversionContext
11661176
): Future[ElasticResult[ElasticResponse]] = delegate.searchAsync(statement)
11671177

11681178
/** Asynchronous search for documents / aggregations matching the Elasticsearch query.
@@ -1179,9 +1189,14 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
11791189
override def singleSearchAsync(
11801190
elasticQuery: ElasticQuery,
11811191
fieldAliases: ListMap[String, String],
1182-
aggregations: ListMap[String, SQLAggregation]
1183-
)(implicit ec: ExecutionContext): Future[ElasticResult[ElasticResponse]] =
1184-
delegate.singleSearchAsync(elasticQuery, fieldAliases, aggregations)
1192+
aggregations: ListMap[String, SQLAggregation],
1193+
fields: Seq[String] = Seq.empty,
1194+
nestedHits: Map[String, Seq[(String, String)]] = Map.empty
1195+
)(implicit
1196+
ec: ExecutionContext,
1197+
context: ConversionContext
1198+
): Future[ElasticResult[ElasticResponse]] =
1199+
delegate.singleSearchAsync(elasticQuery, fieldAliases, aggregations, fields, nestedHits)
11851200

11861201
/** Asynchronous multi-search with Elasticsearch queries.
11871202
*
@@ -1197,9 +1212,14 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
11971212
override def multiSearchAsync(
11981213
elasticQueries: ElasticQueries,
11991214
fieldAliases: ListMap[String, String],
1200-
aggregations: ListMap[String, SQLAggregation]
1201-
)(implicit ec: ExecutionContext): Future[ElasticResult[ElasticResponse]] =
1202-
delegate.multiSearchAsync(elasticQueries, fieldAliases, aggregations)
1215+
aggregations: ListMap[String, SQLAggregation],
1216+
fields: Seq[String] = Seq.empty,
1217+
nestedHits: Map[String, Seq[(String, String)]] = Map.empty
1218+
)(implicit
1219+
ec: ExecutionContext,
1220+
context: ConversionContext
1221+
): Future[ElasticResult[ElasticResponse]] =
1222+
delegate.multiSearchAsync(elasticQueries, fieldAliases, aggregations, fields, nestedHits)
12031223

12041224
/** Searches and converts results into typed entities from an SQL query.
12051225
*
@@ -1374,7 +1394,8 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
13741394
/** Create a scrolling source with automatic strategy selection
13751395
*/
13761396
override def scroll(statement: SearchStatement, config: ScrollConfig)(implicit
1377-
system: ActorSystem
1397+
system: ActorSystem,
1398+
context: ConversionContext
13781399
): Source[(ListMap[String, Any], ScrollMetrics), NotUsed] = delegate.scroll(statement, config)
13791400

13801401
/** Scroll and convert results into typed entities from an SQL query.
@@ -1408,7 +1429,10 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
14081429
fieldAliases: ListMap[String, String],
14091430
aggregations: ListMap[String, SQLAggregation],
14101431
config: ScrollConfig
1411-
)(implicit system: ActorSystem): Source[ListMap[String, Any], NotUsed] = {
1432+
)(implicit
1433+
system: ActorSystem,
1434+
context: ConversionContext
1435+
): Source[ListMap[String, Any], NotUsed] = {
14121436
delegate.scrollClassic(elasticQuery, fieldAliases, aggregations, config)
14131437
}
14141438

@@ -1417,7 +1441,10 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
14171441
fieldAliases: ListMap[String, String],
14181442
config: ScrollConfig,
14191443
hasSorts: Boolean
1420-
)(implicit system: ActorSystem): Source[ListMap[String, Any], NotUsed] = {
1444+
)(implicit
1445+
system: ActorSystem,
1446+
context: ConversionContext
1447+
): Source[ListMap[String, Any], NotUsed] = {
14211448
delegate.searchAfter(elasticQuery, fieldAliases, config, hasSorts)
14221449
}
14231450

@@ -1426,7 +1453,7 @@ trait ElasticClientDelegator extends ElasticClientApi with BulkTypes {
14261453
fieldAliases: ListMap[String, String],
14271454
config: ScrollConfig,
14281455
hasSorts: Boolean
1429-
)(implicit system: ActorSystem) = {
1456+
)(implicit system: ActorSystem, context: ConversionContext) = {
14301457
delegate.pitSearchAfter(elasticQuery, fieldAliases, config, hasSorts)
14311458
}
14321459

0 commit comments

Comments
 (0)