From 61c1d3ddf675f1b1e18feaa128ef374401c927dd Mon Sep 17 00:00:00 2001 From: eliaporciani Date: Wed, 20 May 2020 14:43:15 +0200 Subject: [PATCH] [SEARCH-2166] implemented range queries. --- .../alfresco/solr/query/Solr4QueryParser.java | 86 ++++++++++++------- .../alfresco/solr/DynamicCopyFieldsIT.java | 2 +- .../alfresco-solrclient-lib/pom.xml | 2 +- 3 files changed, 56 insertions(+), 34 deletions(-) diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/query/Solr4QueryParser.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/query/Solr4QueryParser.java index c6765f5dd..b04218d01 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/query/Solr4QueryParser.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/query/Solr4QueryParser.java @@ -3115,43 +3115,65 @@ public class Solr4QueryParser extends QueryParser implements QueryConstants { return buildTextMLTextOrContentRange(field, part1, part2, includeLower, includeUpper, analysisMode, expandedFieldName, propertyDef, tokenisationMode); - } else if (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME) - || propertyDef.getDataType().getName().equals(DataTypeDefinition.DATE)) + } else if ((propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME) + || propertyDef.getDataType().getName().equals(DataTypeDefinition.DATE)) && + !AlfrescoSolrDataModel.getInstance().isDerivedDateField(fieldNameAndEnding.getSecond())) { - Pair dateAndResolution1 = parseDateString(part1); - Pair dateAndResolution2 = parseDateString(part2); - - BooleanQuery.Builder bQuery = new BooleanQuery.Builder(); - IndexedField indexedField = AlfrescoSolrDataModel.getInstance() - .getQueryableFields(propertyDef.getName(), null, FieldUse.ID); - for (FieldInstance instance : indexedField.getFields()) + if (AlfrescoSolrDataModel.getInstance().isDerivedDateField(fieldNameAndEnding.getSecond())) { - String start = dateAndResolution1 == null ? part1 - : (includeLower ? getDateStart(dateAndResolution1) : getDateEnd(dateAndResolution1)); - String end = dateAndResolution2 == null ? part2 - : (includeUpper ? getDateEnd(dateAndResolution2) : getDateStart(dateAndResolution2)); - if (start.equals("*")) - { - start = null; - } - if (end.equals("*")) - { - end = null; - } - SchemaField sf = schema.getField(instance.getField()); - - Query query = sf.getType().getRangeQuery(null, sf, start, end, includeLower, includeUpper); - if (query != null) - { - bQuery.add(query, Occur.SHOULD); - } } - return bQuery.build(); - } else + else + { + Pair dateAndResolution1 = parseDateString(part1); + Pair dateAndResolution2 = parseDateString(part2); + + BooleanQuery.Builder bQuery = new BooleanQuery.Builder(); + IndexedField indexedField = AlfrescoSolrDataModel.getInstance() + .getQueryableFields(propertyDef.getName(), null, FieldUse.ID); + for (FieldInstance instance : indexedField.getFields()) + { + String start = dateAndResolution1 == null ? part1 + : (includeLower ? getDateStart(dateAndResolution1) : getDateEnd(dateAndResolution1)); + String end = dateAndResolution2 == null ? part2 + : (includeUpper ? getDateEnd(dateAndResolution2) : getDateStart(dateAndResolution2)); + if (start.equals("*")) + { + start = null; + } + if (end.equals("*")) + { + end = null; + } + + SchemaField sf = schema.getField(instance.getField()); + + Query query = sf.getType().getRangeQuery(null, sf, start, end, includeLower, includeUpper); + if (query != null) + { + bQuery.add(query, Occur.SHOULD); + } + } + return bQuery.build(); + } + + } + else { - String solrField = AlfrescoSolrDataModel.getInstance() - .getQueryableFields(propertyDef.getName(), null, FieldUse.ID).getFields().get(0).getField(); + + String solrField; + + if ((propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME) + || propertyDef.getDataType().getName().equals(DataTypeDefinition.DATE)) && + AlfrescoSolrDataModel.getInstance().isDerivedDateField(fieldNameAndEnding.getSecond())) + { + solrField = AlfrescoSolrDataModel.getInstance().getDateDerivedField(propertyDef.getName(), fieldNameAndEnding.getSecond()); + } + else + { + solrField = AlfrescoSolrDataModel.getInstance() + .getQueryableFields(propertyDef.getName(), null, FieldUse.ID).getFields().get(0).getField(); + } String start = null; try diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/DynamicCopyFieldsIT.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/DynamicCopyFieldsIT.java index 775006d6d..211dcc076 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/DynamicCopyFieldsIT.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/DynamicCopyFieldsIT.java @@ -375,6 +375,7 @@ public class DynamicCopyFieldsIT extends AbstractAlfrescoDistributedIT { @Test public void textLOVWholeGeneratedFieldsTest() { + Assert.assertFalse(); HashSet fieldModifiers = fieldMap.get(TEXT_LOVWHOLE); assertAllSingleValue(fieldModifiers); Set dynamicFieldsTypes = fieldModifiers.stream() @@ -410,7 +411,6 @@ public class DynamicCopyFieldsIT extends AbstractAlfrescoDistributedIT { * index=disable */ @Test - @Ignore("index enable=false is ignored") public void textNoneGeneratedFieldsTest() { HashSet fieldModifiers = fieldMap.get(TEXT_NONE); diff --git a/search-services/alfresco-solrclient-lib/pom.xml b/search-services/alfresco-solrclient-lib/pom.xml index 93e7d0695..38d42ab33 100644 --- a/search-services/alfresco-solrclient-lib/pom.xml +++ b/search-services/alfresco-solrclient-lib/pom.xml @@ -22,7 +22,7 @@ - 8.112 + 8.-SNAPSHOT 2.10.3