diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java index 79b1bb2ff1..1454e3db6b 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java @@ -502,7 +502,7 @@ public class ADMLuceneSearcherImpl extends AbstractLuceneBase implements LuceneS } } - private static boolean fieldHasTerm(IndexReader indexReader, String field) + public static boolean fieldHasTerm(IndexReader indexReader, String field) { try { diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java index a625efded6..09cc288876 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -958,6 +958,18 @@ public class ADMLuceneTest extends TestCase results.close(); + sp = new SearchParameters(); + sp.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setQuery("-eager or -dog"); + sp.addQueryTemplate("ANDY", "%cm:content"); + sp.setNamespace(NamespaceService.CONTENT_MODEL_1_0_URI); + sp.excludeDataInTheCurrentTransaction(true); + sp.addSort("test:neverIndexed", false); + results = searcher.query(sp); + assertEquals(15, results.length()); + results.close(); + } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml b/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml index bb50836283..32b82c8b08 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml @@ -19,6 +19,12 @@ Test Super Type sys:container + + d:any + false + false + + d:date true diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java index 2a763d632c..f45f5ec885 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java @@ -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 {