Предикат настраиваемого атрибута Hazelcast не учитывается при использовании с операцией агрегирования (подсчета) Imap

Я использую пользовательский атрибут в запросе предиката hazelcast для преобразования поля даты в строку для выполнения оператора LIKE в запросе. Для этого я реализовал экстрактор значений и настроил пользовательский атрибут в файле hazelcast.xml.

<attributes>
                <attribute extractor="com.myproject.util.DocumentComparator$DateExtractor">docdates</attribute>
            </attributes>


public static class DateExtractor extends ValueExtractor<Document, String> {

        private DateTimeFormatter outputFormat = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");

        @SuppressWarnings({ "unchecked", "rawtypes" })
        @Override
        public void extract(PDocument target, String argument, ValueCollector collector) {
            collector.addObject(outputFormat.print(target.getCreatedOn().getTime()));
            collector.addObject(outputFormat.print(target.getUpdatedOn().getTime()));
        }

    }

Приведенный ниже предикат sql с использованием настраиваемого атрибута также работает нормально.

docMap.values(new SqlPredicate("docdates like %17:18:31%"))

Но когда я использую тот же предикат с настраиваемым атрибутом для операции агрегирования (подсчета),

Supplier<Long, Document, Object> supplier = Supplier.fromPredicate(new SqlPredicate("docdates like %17:18:31%"));
                    Aggregation<Long, Object, Long> aggregation = Aggregations.count(); 
                    System.out.println(docMap.aggregate(supplier, aggregation));

Я получаю исключение ниже,

Caused by: java.lang.IllegalArgumentException: There is no suitable accessor for 'docdates' on class 'class com.ltchie.mco.entity.EPDocument'
        at com.hazelcast.query.impl.getters.ReflectionHelper.createGetter(ReflectionHelper.java:168)
        at com.hazelcast.query.impl.getters.Extractors.instantiateGetter(Extractors.java:124)
        at com.hazelcast.query.impl.getters.Extractors.getGetter(Extractors.java:101)
        at com.hazelcast.query.impl.getters.Extractors.extract(Extractors.java:63)
        at com.hazelcast.query.impl.QueryableEntry.extractAttributeValueFromTargetObject(QueryableEntry.java:144)
        at com.hazelcast.query.impl.QueryableEntry.extractAttributeValue(QueryableEntry.java:82)
        at com.hazelcast.query.impl.QueryableEntry.getAttributeValue(QueryableEntry.java:48)
        at com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:130)
        at com.hazelcast.query.impl.predicates.AbstractPredicate.apply(AbstractPredicate.java:55)
        at com.hazelcast.query.SqlPredicate.apply(SqlPredicate.java:72)
        at com.hazelcast.mapreduce.aggregation.impl.PredicateSupplier.apply(PredicateSupplier.java:58)
        at com.hazelcast.mapreduce.aggregation.impl.SupplierConsumingMapper.map(SupplierConsumingMapper.java:57)
        at com.hazelcast.mapreduce.impl.task.KeyValueSourceMappingPhase.executeMappingPhase(KeyValueSourceMappingPhase.java:49)
        at com.hazelcast.mapreduce.impl.task.MapCombineTask.processMapping(MapCombineTask.java:140)
        at com.hazelcast.mapreduce.impl.task.MapCombineTask.processPartitionMapping(MapCombineTask.java:309)
        at com.hazelcast.mapreduce.impl.task.MapCombineTask.access$700(MapCombineTask.java:70)
        at com.hazelcast.mapreduce.impl.task.MapCombineTask$PartitionBasedProcessor.processPartitions(MapCombineTask.java:361)

Кажется, что агрегатная операция hazelcast в IMAP не учитывает объявление пользовательского атрибута. Не могли бы вы помочь мне решить эту проблему? Я использую Hazelcast версии 3.7.8

0 ответов

Другие вопросы по тегам