in connector/src/main/scala/org/apache/spark/sql/cassandra/SolrPredicateRules.scala [242:278]
def convertToSolrFilter(filter: Filter): SolrFilter = filter match {
//Equivalence queries
case EqualTo(attr: String, value: Any) => SolrFilter(s"${toSolrField(attr)}:${toSolrValue(value)}", filter.references)
case EqualNullSafe(attr: String, value: Any) => SolrFilter(s"${toSolrField(attr)}:${toSolrValue(value)}", filter.references)
case In(attr: String, values: Array[Any]) =>
SolrFilter(s"${toSolrField(attr)}:(${values.map(toSolrValue).mkString(" ")})", filter.references)
//Range Queries
case GreaterThan(attr: String, value: Any) => SolrFilter(s"${toSolrField(attr)}:{${toSolrValue(value)} TO *]", filter.references)
case GreaterThanOrEqual(attr: String, value: Any) =>
SolrFilter(s"${toSolrField(attr)}:[${toSolrValue(value)} TO *]", filter.references)
case LessThan(attr: String, value: Any) => SolrFilter(s"${toSolrField(attr)}:[* TO ${toSolrValue(value)}}", filter.references)
case LessThanOrEqual(attr: String, value: Any) =>
SolrFilter(s"${toSolrField(attr)}:[* TO ${toSolrValue(value)}]", filter.references)
//Null Checks
case IsNull(attr: String) => SolrFilter(s"-${toSolrField(attr)}:[* TO *]", filter.references)
case IsNotNull(attr: String) => SolrFilter(s"${toSolrField(attr)}:*", filter.references)
//Conjunctions
case And(left: Filter, right: Filter) =>
SolrFilter(s"""(${convertToSolrFilter(left).solrQuery} AND ${convertToSolrFilter(right).solrQuery})""", filter.references)
case Or(left: Filter, right: Filter) =>
SolrFilter(s"""(${convertToSolrFilter(left).solrQuery} OR ${convertToSolrFilter(right).solrQuery})""", filter.references)
case Not(child: Filter) =>
SolrFilter(s"""-(${convertToSolrFilter(child).solrQuery})""", filter.references)
//StringMatching
case StringStartsWith(attr: String, value: String) => SolrFilter(s"${toSolrField(attr)}:${toSolrValue(value)}*", filter.references)
case StringEndsWith(attr: String, value: String) => SolrFilter(s"${toSolrField(attr)}:*${toSolrValue(value)}", filter.references)
case StringContains(attr: String, value: String) => SolrFilter(s"${toSolrField(attr)}:*${toSolrValue(value)}*", filter.references)
//Unknown
case unknown =>
throw new IllegalArgumentException(s"$unknown cannot be converted")
}