in connector/src/main/scala/org/apache/spark/sql/cassandra/SolrPredicateRules.scala [170:201]
def isConvertibleToSolr(filter: Filter, indexedCols: Set[String]): Boolean = filter match {
case EqualTo(attr: String, value: Any) => indexedCols.contains(sanitizeSolrField(attr))
case EqualNullSafe(attr: String, value: Any) => indexedCols.contains(sanitizeSolrField(attr))
case In(attr: String, values: Array[Any]) => indexedCols.contains(sanitizeSolrField(attr))
//Range Queries
case GreaterThan(attr: String, value: Any) => indexedCols.contains(sanitizeSolrField(attr))
case GreaterThanOrEqual(attr: String, value: Any) => indexedCols.contains(sanitizeSolrField(attr))
case LessThan(attr: String, value: Any) => indexedCols.contains(sanitizeSolrField(attr))
case LessThanOrEqual(attr: String, value: Any) => indexedCols.contains(sanitizeSolrField(attr))
//Null Checks
case IsNull(attr: String) => indexedCols.contains(sanitizeSolrField(attr))
case IsNotNull(attr: String) => indexedCols.contains(sanitizeSolrField(attr))
//Conjunctions
case And(left: Filter, right: Filter) =>
isConvertibleToSolr(left, indexedCols) && isConvertibleToSolr(right, indexedCols)
case Or(left: Filter, right: Filter) =>
isConvertibleToSolr(left, indexedCols) && isConvertibleToSolr(right, indexedCols)
case Not(child: Filter) => isConvertibleToSolr(child, indexedCols)
//StringMatching
case StringStartsWith(attr: String, value: String) => indexedCols.contains(sanitizeSolrField(attr))
case StringEndsWith(attr: String, value: String) => indexedCols.contains(sanitizeSolrField(attr))
case StringContains(attr: String, value: String) => indexedCols.contains(sanitizeSolrField(attr))
//Unknown
case unknownFilter =>
logError(s"Unknown Filter Type $unknownFilter")
false
}