in s2core/src/main/scala/org/apache/s2graph/core/index/IndexProvider.scala [65:101]
def buildQuerySingleString(container: HasContainer): String = {
import scala.collection.JavaConversions._
val key = if (container.getKey == T.label.getAccessor) labelField else container.getKey
val value = container.getValue
container.getPredicate match {
case and: AndP[_] =>
val buffer = scala.collection.mutable.ArrayBuffer.empty[String]
and.getPredicates.foreach { p =>
buffer.append(buildQuerySingleString(new HasContainer(container.getKey, p)))
}
buffer.mkString("(", " AND ", ")")
case or: OrP[_] =>
val buffer = scala.collection.mutable.ArrayBuffer.empty[String]
or.getPredicates.foreach { p =>
buffer.append(buildQuerySingleString(new HasContainer(container.getKey, p)))
}
buffer.mkString("(", " OR ", ")")
case _ =>
val biPredicate = container.getBiPredicate
biPredicate match {
case Contains.within =>
key + ":(" + value.asInstanceOf[util.Collection[_]].toSeq.mkString(" OR ") + ")"
case Contains.without =>
"NOT " + key + ":(" + value.asInstanceOf[util.Collection[_]].toSeq.mkString(" AND ") + ")"
case Compare.eq => s"${key}:${value}"
case Compare.gt => s"(${key}:[${value} TO *] AND NOT ${key}:${value})"
case Compare.gte => s"${key}:[${value} TO *]"
case Compare.lt => s"${key}:[* TO ${value}]"
case Compare.lte => s"(${key}:[* TO ${value}] OR ${key}:${value})"
case Compare.neq => s"NOT ${key}:${value}"
case _ => throw new IllegalArgumentException("not supported yet.")
}
}
}