}
private Key[] evaluateSelect(Transaction tx, SelectQueryNode node) throws QueryException {
try {
IndexPattern pattern = new IndexPattern(context.getSymbols(), node.name, nsMap);
Indexer idx = context.getIndexManager().getBestIndexer(Indexer.STYLE_FULLTEXT, pattern);
if ( idx != null ) {
String value = node.value;
// If it's a FullTextIndexer, check it for stop words instead
// of querying it for no reason.
if ( idx instanceof FullTextIndexer ) {
FullTextIndexer fidx = (FullTextIndexer)idx;
WordStemmer stemmer = fidx.getWordStemmer();
if ( stemmer != null )
value = stemmer.normalizeCase(value);
Set stopWords = fidx.getStopWords();
if ( stopWords != null && stopWords.contains(value) )
return null;
}
IndexQuery idxQry = new IndexQuery(pattern, node.operator, new Value(node.value));
IndexMatch[] matches = idx.queryMatches(tx, idxQry);
return QueryEngine.getUniqueKeys(matches);
}
else
throw new ProcessingException("No FullText Index to support pattern '"+node.name+"'");
}