Skip to content

Commit 3f53617

Browse files
authored
Merge pull request #54 from delphi-hub/feature/feature-selection
Enabled field selections
2 parents fa5ffd2 + f5a2357 commit 3f53617

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ libraryDependencies ++= Seq(
2727
"com.sksamuel.elastic4s" %% "elastic4s-http-streams" % elastic4sVersion,
2828
)
2929

30-
libraryDependencies += "de.upb.cs.swt.delphi" %% "delphi-core" % "0.9.1"
30+
libraryDependencies += "de.upb.cs.swt.delphi" %% "delphi-core" % "0.9.2"
3131

3232
libraryDependencies += "com.pauldijou" %% "jwt-core" % "4.2.0"
3333

src/main/scala/de/upb/cs/swt/delphi/webapi/search/SearchQuery.scala

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,32 @@ class SearchQuery(configuration: Configuration, featureExtractor: FeatureQuery)
4545

4646
lazy val externalToInternalFeature = internalFeatures.map(i => i.name -> i.internalName).toMap
4747

48-
private def checkAndExecuteParsedQuery(ast: CombinatorialExpr, limit: Int): Try[SearchHits] = {
49-
val fields = collectFieldNames(ast)
48+
private def checkAndExecuteParsedQuery(parsedQuery: de.upb.cs.swt.delphi.core.ql.Query, limit: Int): Try[SearchHits] = {
49+
val fields = collectFieldNames(parsedQuery.expr)
5050

5151
val publicFieldNames = internalFeatures.map(i => i.name)
5252
val invalidFields = fields.toSet.filter(f => !publicFieldNames.contains(f))
5353

5454
if (invalidFields.size > 0) return Failure(new IllegalArgumentException(s"Unknown field name(s) used. (${invalidFields.mkString(",")})"))
5555

5656
val translatedFields = fields.toSet.map(externalToInternalFeature(_))
57+
def getPrefix (in: String) : String = {
58+
if (in.contains("*")) {
59+
in.substring(0, in.indexOf("*"))
60+
}
61+
else {
62+
in
63+
}
64+
}
65+
val selectedFields = parsedQuery
66+
.selections
67+
.flatMap(f => internalFeatures.filter(i => i.name.startsWith(getPrefix(f.fieldName))))
68+
.map(i => i.internalName)
69+
5770

5871
val query = searchWithType(configuration.esProjectIndex)
59-
.query(translate(ast))
60-
.sourceInclude(ArtifactTransformer.baseFields ++ translatedFields)
72+
.query(translate(parsedQuery.expr))
73+
.sourceInclude(ArtifactTransformer.baseFields ++ translatedFields ++ selectedFields)
6174
.limit(limit)
6275

6376
val response = client.execute {
@@ -154,8 +167,8 @@ class SearchQuery(configuration: Configuration, featureExtractor: FeatureQuery)
154167
val parserResult = new Syntax(query.query).QueryRule.run()
155168
parserResult match {
156169
case Failure(e) => Failure(e)
157-
case Success(ast) => {
158-
checkAndExecuteParsedQuery(ast, query.limit.getOrElse(defaultFetchSize)) match {
170+
case Success(parsedQuery) => {
171+
checkAndExecuteParsedQuery(parsedQuery, query.limit.getOrElse(defaultFetchSize)) match {
159172
case Failure(e) => Failure(e)
160173
case Success(hits) => Success(ArtifactTransformer.transformResults(hits))
161174
}

0 commit comments

Comments
 (0)