首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何禁用弹性搜索并返回到hibernate搜索6中的本地文件系统存储?

如何禁用弹性搜索并返回到hibernate搜索6中的本地文件系统存储?
EN

Stack Overflow用户
提问于 2022-09-10 13:03:52
回答 1查看 52关注 0票数 -1

我使用Hibernate 6和Amazons的opensearch服务器在生产中。当我在本地进行测试时,我不想使用opensearch服务器,而是想使用local-filesystem来存储索引文件。

但是,即使我使用jpaProperties.put("hibernate.search.backend.directory.type", "local-filesystem");显式地设置了本地文件系统,同时又不设置属性hibernate.search.backend.uris,我也不能使用hibernate搜索来使用它。在以编程方式设置所有hibernate搜索属性之前,我在启动时得到以下错误:

代码语言:javascript
运行
复制
    default backend: 
        failures: 
          - HSEARCH400080: Unable to detect the Elasticsearch version running on the cluster: HSEARCH400007: Elasticsearch request failed: Connection refused: no further information
Request: GET  with parameters {}

我有以下maven依赖项:

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.hibernate.search</groupId>
    <artifactId>hibernate-search-mapper-orm</artifactId>
    <version>6.1.5.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate.search</groupId>
    <artifactId>hibernate-search-backend-elasticsearch-aws</artifactId>
    <version>6.1.5.Final</version>
</dependency>

如果只使用lucene,则以下设置hibernate搜索和lucene文件目标路径:

代码语言:javascript
运行
复制
    private Properties initializeJpaProperties() {
        String luceneAbsoluteFilePath = useExternalElasticSearchServer ? null : setDefaultLuceneIndexBaseFilePath(); //Alleen relevant wanneer je geen elastic search gebruikt.
        Properties jpaProperties = new Properties();
        //---------------------------open search aws related-----------------------------------
        if(useExternalElasticSearchServer) {
            jpaProperties.put("hibernate.search.backend.aws.credentials.type", "static");
            jpaProperties.put("hibernate.search.backend.aws.credentials.access_key_id", awsId);
            jpaProperties.put("hibernate.search.backend.aws.credentials.secret_access_key", awsKey);
            jpaProperties.put("hibernate.search.backend.aws.region", openSearchAwsInstanceRegion);
            jpaProperties.put("hibernate.search.backend.aws.signing.enabled", true);
            jpaProperties.put("hibernate.search.backend.uris", elasticSearchHostAddress);
        }
        //--------------------------------------------------------------------------------------------
        jpaProperties.put("hibernate.search.automatic_indexing.synchronization.strategy", indexSynchronizationStrategy);
        jpaProperties.put("hibernate.search.backend.request_timeout", requestTimeout);
        jpaProperties.put("hibernate.search.backend.connection_timeout", elasticSearchConnectionTimeout);
        jpaProperties.put("hibernate.search.backend.read_timeout", readTimeout);
        jpaProperties.put("hibernate.search.backend.max_connections", maximumElasticSearchConnections);
        jpaProperties.put("hibernate.search.backend.max_connections_per_route", maximumElasticSearchConnectionsPerRout);
//        jpaProperties.put("hibernate.search.schema_management.strategy", schemaManagementStrategy);
        jpaProperties.put("hibernate.search.backend.thread_pool.size", maxPoolSize);
        jpaProperties.put("hibernate.search.backend.analysis.configurer", "class:config.EnhancedLuceneAnalysisConfig");
    //    jpaProperties.put("hibernate.search.backend.username", hibernateSearchUsername); //Alleen voor wanneer je elastic search lokaal draait
    //    jpaProperties.put("hibernate.search.backend.password", hibernateSearchPassword);
        if(!useExternalElasticSearchServer) {
            jpaProperties.put("hibernate.search.backend.directory.type", "local-filesystem");
            jpaProperties.put("hibernate.search.backend.directory.root", luceneAbsoluteFilePath);
            jpaProperties.put("hibernate.search.backend.lucene_version", "LUCENE_CURRENT");
            jpaProperties.put("hibernate.search.backend.io.writer.infostream", true);
        }
        jpaProperties.put("hibernate.jdbc.batch_size", defaultBatchSize);
        jpaProperties.put("spring.jpa.properties.hibernate.jdbc.batch_size", defaultBatchSize);
        jpaProperties.put("hibernate.order_inserts", "true");
        jpaProperties.put("hibernate.order_updates", "true");
        jpaProperties.put("hibernate.batch_versioned_data", "true");
//        log.info("The directory of the lucene index files is set to {}", luceneAbsoluteFilePath);
        return jpaProperties;
    }

    private String setDefaultLuceneIndexBaseFilePath() {
        String luceneRelativeFilePath = ServiceUtil.getOperatingSystemCompatiblePath("/data/lucene/indexes/default"); 
        StringBuilder luceneAbsoluteFilePath = new StringBuilder(System.getProperty("user.dir"));
        if(!StringUtils.isEmpty(luceneIndexBase)) {
            luceneRelativeFilePath = ServiceUtil.getOperatingSystemCompatiblePath(luceneIndexBase);
            String OSPathSeparator = ServiceUtil.getOperatingSystemFileSeparator();
            if(luceneRelativeFilePath.toCharArray()[0] != OSPathSeparator.charAt(0))
                luceneAbsoluteFilePath.append(OSPathSeparator);
            luceneAbsoluteFilePath.append(luceneRelativeFilePath);
            validateUserDefinedAbsolutePath(luceneRelativeFilePath);
        }
        else{
            log.warn("No relative path value for property 'lucene-index-base' was found in application.properties, will use the default path '{}' instead.", luceneRelativeFilePath);
            luceneAbsoluteFilePath.append(luceneRelativeFilePath);
        }
        return luceneAbsoluteFilePath.toString();
    }

我知道我可以在hibernate.search.enabled设置为false的情况下完全禁用hibernate搜索,但我不想这样做。我希望能够切换到lucene,而不必事先从我的POM.xml中删除所有ElasticSearch/OpenSearch依赖项。我该怎么做?

编辑:我刚刚发现您可以用hibernate.search.backend.type设置后端类型。默认情况下,此设置设置为值elasticsearch。我也应该能够设置这个值给lucene,但是当我这样做时,我会得到以下错误:

代码语言:javascript
运行
复制
    default backend: 
        failures: 
          - HSEARCH000501: Invalid value for configuration property 'hibernate.search.backend.type': 'lucene'. HSEARCH000579: Unable to resolve bean reference to type 'org.hibernate.search.engine.backend.spi.BackendFactory' and name 'lucene'. Failed to resolve bean from Hibernate Search's internal registry with exception: HSEARCH000578: No beans defined for type 'org.hibernate.search.engine.backend.spi.BackendFactory' and name 'lucene' in Hibernate Search's internal registry. Failed to resolve bean from bean manager with exception: HSEARCH000590: No configured bean manager. Failed to resolve bean from bean manager with exception: HSEARCH000591: Unable to resolve 'lucene' to a class extending 'org.hibernate.search.engine.backend.spi.BackendFactory': HSEARCH000530: Unable to load class 'lucene': Could not load requested class : lucene Failed to resolve bean using reflection with exception: HSEARCH000591: Unable to resolve 'lucene' to a class extending 
'org.hibernate.search.engine.backend.spi.BackendFactory': HSEARCH000530: Unable to load class 'lucene': Could not load requested class : lucene

编辑2:

我尝试过设置以下设置,但也没有成功。

代码语言:javascript
运行
复制
jpaProperties.put("hibernate.search.default_backend", "lucene");
jpaProperties.put("hibernate.search.backends.lucene.type", "lucene");
jpaProperties.put("hibernate.search.backend.type", "lucene");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-12 07:09:07

您需要根据环境显式地设置后端类型:

代码语言:javascript
运行
复制
jpaProperties.put("hibernate.search.backend.type", isProductionEnvironment() ? "elasticsearch" : "lucene");

还需要在类路径中使用Lucene后端:

代码语言:javascript
运行
复制
<dependency>
   <groupId>org.hibernate.search</groupId>
   <artifactId>hibernate-search-backend-lucene</artifactId>
   <version>${my-hibernate-search-version}</version>
</dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73672019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档