Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate搜索[5.11.5.Final]动态数字属性:无法自动确定字段';的字段类型';_Java_Spring Boot_Hibernate_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Hibernate Search - Fatal编程技术网 elasticsearch,hibernate-search,Java,Spring Boot,Hibernate,elasticsearch,Hibernate Search" /> elasticsearch,hibernate-search,Java,Spring Boot,Hibernate,elasticsearch,Hibernate Search" />

Java Hibernate搜索[5.11.5.Final]动态数字属性:无法自动确定字段';的字段类型';

Java Hibernate搜索[5.11.5.Final]动态数字属性:无法自动确定字段';的字段类型';,java,spring-boot,hibernate,elasticsearch,hibernate-search,Java,Spring Boot,Hibernate,elasticsearch,Hibernate Search,我在正确索引动态数字字段时遇到了一些问题,似乎它们总是作为字符串索引 据我所知,在索引动态数字字段时,我必须使用动态模板: PUT /com.product.product { "mappings": { "com.product.Product": { "dynamic_templates": [ { "

我在正确索引动态数字字段时遇到了一些问题,似乎它们总是作为字符串索引

据我所知,在索引动态数字字段时,我必须使用动态模板:

PUT /com.product.product

{
    "mappings": {
        "com.product.Product": {
            "dynamic_templates": [
                {
                    "numeric_sort": {
                        "match_mapping_type": "*",
                        "match_pattern": "regex",
                        "match": "^sort_num_.*",
                        "mapping": {
                            "type": "double"
                        }
                    }
                }
            ]
        }
    }
}
我正在事件侦听器中上载的:

@Configuration
@Transactional
public abstract class DynamicTemplateConfig {
    @EventListener
    public void addDynamicTemplates(ContextRefreshedEvent event) {
        if (this.searchIndexingIsActive) {
            this.addDynamicTemplates();
        }
    }
    ...
}
我在一个字段桥中索引属性:

public class PropertyValueFieldBridge implements FieldBridge {
    ...
    private void indexBigDecimalProperties(Document document, LuceneOptions luceneOptions, PropertyBigDecimal property) {
            String fieldName = PREFIX_SORT + NUMERIC + DELIMITER + property.getProperty().getCode();
            Double indexedValue = property.getValue().doubleValue();
    
            luceneOptions.addNumericFieldToDocument(
                    fieldName,
                    indexedValue,
                    document);
        }

    }
索引这些BigDecimal属性后,我总是以索引的字符串属性结束:

"_source": {
    "id": "1",
    "sort_id": 1,
    "filter_id": 1,
    "sort_num_quantity": "115.0"
}
当我尝试对该属性进行排序时,我有以下例外:

org.hibernate.search.exception.SearchException: Cannot automatically determine the field type for field 'sort_num_quantity'. Use byField(String, Sort.Type) to provide the sort type explicitly.
    at org.hibernate.search.query.dsl.sort.impl.SortFieldStates.getCurrentSortFieldTypeFromMetamodel(SortFieldStates.java:177) ~[hibernate-search-engine-5.11.5.Final.jar:5.11.5.Final]
    at org.hibernate.search.query.dsl.sort.impl.SortFieldStates.determineCurrentSortFieldTypeAutomaticaly(SortFieldStates.java:150) ~[hibernate-search-engine-5.11.5.Final.jar:5.11.5.Final]
    at org.hibernate.search.query.dsl.sort.impl.ConnectedSortContext.byField(ConnectedSortContext.java:42) ~[hibernate-search-engine-5.11.5.Final.jar:5.11.5.Final]
我试图避免使用
byField(String,Sort.Type)
,因为它需要对每个属性进行明确性验证,而我可能不知道这些属性的名称和类型

我在索引过程中是否做错了什么


提前谢谢

我不认为你做错了什么。Hibernate Search 5中的实验性Elasticsearch集成并不真正支持动态字段。您不能预先指定字段的类型,而且它显然默认为动态字段的字符串类型

升级到HibernateSearch6(目前处于候选发布阶段)将是一个解决方案,因为 但是,HibernateSearch6API不同,因此迁移可能需要大量工作