in connector/src/main/scala/org/apache/spark/sql/cassandra/SolrPredicateRules.scala [119:157]
def getSolrIndexedColumnsFromSolrXML(tableDef: TableDef, sparkConf: SparkConf): Set[String] = {
def solrIndexedFail(str: String): Set[String] = {
logDebug(s"""Retrieval of Solr Index Info Failed: $str""")
Set.empty
}
val SelectSolrSchema =
s"""SELECT blobAsText(resource_value) FROM
|solr_admin.solr_resources
|where core_name = '${tableDef.keyspaceName}.${tableDef.tableName}'
|and resource_name = 'schema.xml.bak' """.stripMargin
Try {
CassandraConnector(sparkConf)
.withSessionDo(_.execute(SelectSolrSchema))
.one()
.getString(0)
} match {
case Success(schema: String) => Try {
val schemaXML = scala.xml.XML.loadString(schema)
schemaXML
.child
.filter(_.label == "fields")
.head
.child
.filter(x => x.label == "field")
//multiValued indexes are for graph internal use only
.filter(!_.attributes.asAttrMap.getOrElse("multiValued", "false").toBoolean)
.filter(_.attributes.asAttrMap.getOrElse("indexed", "false").toBoolean)
.map(_.attribute("name").get.toString)
.toSet[String]
} match {
case Success(indexed) => indexed
case Failure(e) => solrIndexedFail(s"Unable to parse schema.xml.bak: $e")
}
case Failure(e) => solrIndexedFail(s"Unable to access Solr Info: $e")
}
}