Fix for MOB-1221: Sorting on an indexed field that has not yet been applied to any node causes an exception in the SearchService

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@15702 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2009-08-12 14:27:38 +00:00
parent 5162e3e2e5
commit 93876b8079
4 changed files with 33 additions and 7 deletions

View File

@@ -27,6 +27,7 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene;
import java.util.List;
import java.util.Set;
import org.alfresco.repo.search.impl.lucene.ADMLuceneSearcherImpl;
import org.alfresco.repo.search.impl.querymodel.Column;
import org.alfresco.repo.search.impl.querymodel.Constraint;
import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext;
@@ -79,7 +80,7 @@ public class LuceneQuery extends BaseQuery implements LuceneQueryBuilder
@SuppressWarnings("unused")
boolean should = false;
boolean must_not = false;
if (selectors != null)
{
for (String selector : selectors)
@@ -111,7 +112,7 @@ public class LuceneQuery extends BaseQuery implements LuceneQueryBuilder
Query constraintQuery = luceneQueryBuilderComponent.addComponent(selectors, null, luceneContext, functionContext);
if (constraintQuery != null)
{
switch(constraint.getOccur())
switch (constraint.getOccur())
{
case DEFAULT:
case MANDATORY:
@@ -138,10 +139,10 @@ public class LuceneQuery extends BaseQuery implements LuceneQueryBuilder
throw new UnsupportedOperationException();
}
}
if(!must && must_not)
if (!must && must_not)
{
luceneQuery.add(new TermQuery(new Term("ISNODE", "T")), BooleanClause.Occur.MUST);
luceneQuery.add(new TermQuery(new Term("ISNODE", "T")), BooleanClause.Occur.MUST);
}
return luceneQuery;
@@ -182,7 +183,14 @@ public class LuceneQuery extends BaseQuery implements LuceneQueryBuilder
if (luceneField != null)
{
fields[index++] = new SortField(luceneField, (ordering.getOrder() == Order.DESCENDING));
if (ADMLuceneSearcherImpl.fieldHasTerm(luceneContext.getLuceneQueryParser().getIndexReader(), luceneField))
{
fields[index++] = new SortField(luceneField, (ordering.getOrder() == Order.DESCENDING));
}
else
{
fields[index++] = new SortField(null, SortField.DOC, (ordering.getOrder() == Order.DESCENDING));
}
}
else
{