public List < SecondaryIndexSearcher > getIndexSearchersForQuery ( List < IndexExpression > clause ) { Map < String , Set < ByteBuffer > > groupByIndexType = new HashMap <> ( ) ; //Group columns by type for ( IndexExpression ix : clause ) { SecondaryIndex index = getIndexForColumn ( ix . column ) ; if ( index == null || ! index . supportsOperator ( ix . operator ) ) continue ; Set < ByteBuffer > columns = groupByIndexType . get ( index . indexTypeForGrouping ( ) ) ; if ( columns == null ) { columns = new HashSet <> ( ) ; groupByIndexType . put ( index . indexTypeForGrouping ( ) , columns ) ; } columns . add ( ix . column ) ; } List < SecondaryIndexSearcher > indexSearchers = new ArrayList <> ( groupByIndexType . size ( ) ) ; //create searcher per type for ( Set < ByteBuffer > column : groupByIndexType . values ( ) ) indexSearchers . ( getIndexForColumn ( column . iterator ( ) . next ( ) ) . createSecondaryIndexSearcher ( column ) ) ; return indexSearchers ; }
Get a list of IndexSearchers from the union of expression index types