def getSolrIndexedColumnsFromSolrXML()

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")
    }
  }