Skip to content

Commit 1fb2b5f

Browse files
committed
fix nested inner hits
1 parent a8e4f88 commit 1fb2b5f

File tree

5 files changed

+1412
-1157
lines changed

5 files changed

+1412
-1157
lines changed

es6/sql-bridge/src/main/scala/app/softnetwork/elastic/sql/bridge/ElasticQuery.scala

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import app.softnetwork.elastic.sql.query.{
1818
}
1919
import com.sksamuel.elastic4s.ElasticApi._
2020
import com.sksamuel.elastic4s.FetchSourceContext
21-
import com.sksamuel.elastic4s.searches.queries.Query
21+
import com.sksamuel.elastic4s.searches.queries.{InnerHit, Query}
2222

2323
import scala.annotation.tailrec
2424

@@ -47,7 +47,6 @@ case class ElasticQuery(filter: ElasticFilter) {
4747
.query(innerHitsNames + innerHitsName.getOrElse(""), boolQuery)
4848

4949
val nestedElements: Seq[NestedElement] = criteria.nestedElements.sortBy(_.level)
50-
nestedElements.foreach(n => println(s"nestedElement: ${n.path}, level: ${n.level}"))
5150

5251
val nestedParentsPath
5352
: collection.mutable.Map[String, (NestedElement, Seq[NestedElement])] =
@@ -73,6 +72,24 @@ case class ElasticQuery(filter: ElasticFilter) {
7372

7473
val nestedParents = getNestedParents(nestedElements.last, Seq.empty)
7574

75+
def nestedInner(n: NestedElement): InnerHit = {
76+
var inner = innerHits(n.innerHitsName)
77+
n.size match {
78+
case Some(s) =>
79+
inner = inner.from(0).size(s)
80+
case _ =>
81+
}
82+
if (n.sources.nonEmpty) {
83+
inner = inner.fetchSource(
84+
FetchSourceContext(
85+
fetchSource = true,
86+
includes = n.sources.toArray
87+
)
88+
)
89+
}
90+
inner
91+
}
92+
7693
def buildNestedQuery(n: NestedElement): Query = {
7794
val children = nestedParentsPath.get(n.path).map(_._2).getOrElse(Seq.empty)
7895
if (children.nonEmpty) {
@@ -87,25 +104,15 @@ case class ElasticQuery(filter: ElasticFilter) {
87104
combinedQuery
88105
) /*.scoreMode(ScoreMode.None)*/
89106
.inner(
90-
innerHits(n.innerHitsName)
91-
.from(0)
92-
.size(n.size.getOrElse(3))
93-
.fetchSource(
94-
FetchSourceContext(fetchSource = true, includes = n.sources.toArray)
95-
)
107+
nestedInner(n)
96108
)
97109
} else {
98110
nestedQuery(
99111
n.path,
100112
q
101113
) /*.scoreMode(ScoreMode.None)*/
102114
.inner(
103-
innerHits(n.innerHitsName)
104-
.from(0)
105-
.size(n.size.getOrElse(3))
106-
.fetchSource(
107-
FetchSourceContext(fetchSource = true, includes = n.sources.toArray)
108-
)
115+
nestedInner(n)
109116
)
110117
}
111118
}

0 commit comments

Comments
 (0)