有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Elasticsearch 7.8和Magnolia 6.2。十、

我想使用最新的elasticsearch版本(7.8.0)和最新的Mgnl(CE)版本(目前为6.2.2)。在一些较老的项目中,他们经常使用弹性版本<;3.6对于所有api调用(如搜索/索引查询),它们使用Elastic的旧传输客户端。该客户机将被elastic的v8删除,并将被elastic的其余高级客户机Api替换

在我的测试中,我通过mvn原型生成使用了一个空白的mgnl 6.2.2,并使用一个虚拟页面和虚拟组件从mgnl设置了一个简单的模块。为了测试结果,我修改了该虚拟对象,将以下代码段作为组件模型调用

我的模型:

package com.test.model;

import javax.jcr.Node;

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import info.magnolia.rendering.model.RenderingModel;
import info.magnolia.rendering.model.RenderingModelImpl;
import info.magnolia.rendering.template.TemplateDefinition;

public class TestModel extends RenderingModelImpl<TemplateDefinition>{

    public TestModel(Node content, TemplateDefinition definition, RenderingModel<?> parent) {
        super(content, definition, parent);
    }

    public void init( ) {
        SearchRequest test = new SearchRequest();
        SearchSourceBuilder testSource = new SearchSourceBuilder();
        test.source(testSource);
        System.out.println("test done");
    }
}

以下是我的pom:

测试模块:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.test</groupId>
        <artifactId>mgnl</artifactId>
        <version>1</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>mgnl-web</artifactId>
    <packaging>jar</packaging>
    <name>mgnl-web Magnolia Module</name>
    <!-- <description>Please uncomment and fill in ...</description> -->
    <properties>
        <magnoliaBundleVersion>6.2.2</magnoliaBundleVersion>
        <javaVersion>1.8</javaVersion>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>info.magnolia.bundle</groupId>
                <artifactId>magnolia-bundle-parent</artifactId>
                <version>${magnoliaBundleVersion}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>info.magnolia</groupId>
            <artifactId>magnolia-rendering</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.8.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.lucene</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <dependency>
            <groupId>info.magnolia</groupId>
            <artifactId>magnolia-core</artifactId>
        </dependency>

        <!-- TEST -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${javaVersion}</source>
                    <target>${javaVersion}</target>
                </configuration>
            </plugin>
        </plugins>

        <!-- default resources configuration which will filter the module descriptor -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>META-INF/magnolia/*</include>
                </includes>
            </resource>
        </resources>
    </build>

    <repositories>
        <repository>
            <id>magnolia.public</id>
            <url>https://nexus.magnolia-cms.com/content/groups/public</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <!-- IF YOU NEED MODULES FROM THE ENTERPRISE VERSION, UNCOMMENT THE FOLLOWING 
        REPOSITORY -->
        <!-- <repository> <id>magnolia.enterprise.releases</id> <url>https://nexus.magnolia-cms.com/content/repositories/magnolia.enterprise.releases</url> 
            <snapshots> <enabled>false</enabled> </snapshots> </repository> -->
        <repository>
            <id>vaadin-addons</id>
            <url>https://maven.vaadin.com/vaadin-addons</url>
        </repository>
    </repositories>

</project>

父pom(通过mgnl mvn原型的非接触式生成):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test</groupId>
    <artifactId>mgnl</artifactId>
    <name>mgnl (parent pom)</name>
    <version>1</version>
    <packaging>pom</packaging>

    <properties>
        <magnoliaBundleVersion>6.2.2</magnoliaBundleVersion>
        <javaVersion>1.8</javaVersion>
    </properties>

    <!-- Fill the following in, so you can use the release plugin -->
    <scm>
        <connection />
        <developerConnection />
        <url />
    </scm>

    <dependencyManagement>
        <dependencies>
            <!-- Option A -->
            <!-- Importing dependencyManagement of CE bundle. -->
            <dependency>
                <groupId>info.magnolia.bundle</groupId>
                <artifactId>magnolia-bundle-parent</artifactId>
                <version>${magnoliaBundleVersion}</version>
                <type>pom</type>
                <scope>import</scope>
                <exclusions>
                    <exclusion>
                        <artifactId>*</artifactId>
                        <groupId>org.apache.lucene</groupId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- Option B -->
            <!-- If you want to use the DX CORE. -->
            <!-- <dependency> <groupId>info.magnolia.dx</groupId> <artifactId>magnolia-dx-core-parent</artifactId> 
                <version>${magnoliaBundleVersion}</version> <type>pom</type> <scope>import</scope> 
                </dependency> -->
        </dependencies>
    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${javaVersion}</source>
                    <target>${javaVersion}</target>
                </configuration>
            </plugin>
        </plugins>

        <!-- default resources configuration which will filter your module descriptors -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>META-INF/magnolia/*</include>
                </includes>
            </resource>
        </resources>
    </build>

    <repositories>
        <repository>
            <id>magnolia.public</id>
            <url>https://nexus.magnolia-cms.com/content/groups/public</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <!-- IF YOU NEED MODULES FROM THE ENTERPRISE VERSION, UNCOMMENT THE FOLLOWING 
            REPOSITORY -->
        <!-- <repository> <id>magnolia.enterprise.releases</id> <url>https://nexus.magnolia-cms.com/content/repositories/magnolia.enterprise.releases</url> 
            <snapshots> <enabled>false</enabled> </snapshots> </repository> -->
        <repository>
            <id>vaadin-addons</id>
            <url>https://maven.vaadin.com/vaadin-addons</url>
        </repository>
    </repositories>

    <modules>
        <module>mgnl-webapp</module>
        <module>mgnl-web</module>
    </modules>
</project>

如果我尝试使用SearchSourceBuilder设置一个简单的SearchRequest,就像在TestModel中编写的那样,我会遇到以下异常:

Caused by: java.lang.NoSuchFieldError: LATEST
at org.elasticsearch.Version.<clinit>(Version.java:59)
at org.elasticsearch.common.logging.DeprecationLogger.<clinit>(DeprecationLogger.java:143)
at org.elasticsearch.search.builder.SearchSourceBuilder.<clinit>(SearchSourceBuilder.java:83)
at com.test.model.TestModel.init(TestModel.java:20)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45009)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45012)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1505)
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:72)

在阅读了一些论坛后,我注意到如果lucene core有不同的版本,就会出现这种情况,因此我找出了哪些版本提供了:

mvn dependency:tree -Dverbose -Dincludes=org.apache.lucene

并得到如下结果:

[INFO] -------------------------< com.test:mgnl-web >--------------------------
[INFO] Building mgnl-web Magnolia Module 1                                [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ mgnl-web ---
[INFO] com.test:mgnl-web:jar:1
[INFO] +- org.elasticsearch:elasticsearch:jar:7.8.0:compile
[INFO] |  +- org.apache.lucene:lucene-core:jar:3.6.0:compile
[INFO] |  +- org.apache.lucene:lucene-analyzers-common:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-backward-codecs:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-grouping:jar:8.5.1:compile
[INFO] |  |  +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  |  \- (org.apache.lucene:lucene-queries:jar:8.5.1:compile - omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-highlighter:jar:8.5.1:compile
[INFO] |  |  +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  |  +- (org.apache.lucene:lucene-memory:jar:8.5.1:compile - omitted for duplicate)
[INFO] |  |  \- (org.apache.lucene:lucene-queries:jar:8.5.1:compile - omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-join:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-memory:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-misc:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-queries:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-queryparser:jar:8.5.1:compile
[INFO] |  |  +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  |  +- (org.apache.lucene:lucene-queries:jar:8.5.1:compile - omitted for duplicate)
[INFO] |  |  \- (org.apache.lucene:lucene-sandbox:jar:8.5.1:compile - omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-sandbox:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-spatial-extras:jar:8.5.1:compile
[INFO] |  |  +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  |  \- (org.apache.lucene:lucene-spatial3d:jar:8.5.1:compile - omitted for duplicate)
[INFO] |  +- org.apache.lucene:lucene-spatial3d:jar:8.5.1:compile
[INFO] |  |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] |  \- org.apache.lucene:lucene-suggest:jar:8.5.1:compile
[INFO] |     +- (org.apache.lucene:lucene-analyzers-common:jar:8.5.1:compile - omitted for duplicate)
[INFO] |     \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] \- info.magnolia:magnolia-core:jar:6.2.2:compile
[INFO]    +- org.apache.jackrabbit:jackrabbit-core:jar:2.20.0:compile
[INFO]    |  \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO]    \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)

如上所示,依赖项mgnl核心包含lucene核心v3。6来自jackrabbit core 2.20.0

如果我试图排除lucene v3。6且仅包括elasticsearch v7中的一个。8在上述我的测试模块中进行以下pom更改:

<dependencies>
    <dependency>
        <groupId>info.magnolia</groupId>
        <artifactId>magnolia-rendering</artifactId>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>7.8.0</version>
   </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.8.0</version>
    </dependency>
    <dependency>
        <groupId>info.magnolia</groupId>
        <artifactId>magnolia-core</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.lucene</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
        <!-- TEST -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

将发生以下例外情况:

java.lang.IllegalAccessError: class org.apache.jackrabbit.core.query.lucene.JackrabbitAnalyzer tried to access protected method org.apache.lucene.analysis.StopwordAnalyzerBase.<init>(Lorg/apache/lucene/util/Version;Ljava/util/Set;)V (org.apache.jackrabbit.core.query.lucene.JackrabbitAnalyzer and org.apache.lucene.analysis.StopwordAnalyzerBase are in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @479f2dc2)
    at org.apache.jackrabbit.core.query.lucene.JackrabbitAnalyzer.<clinit>(JackrabbitAnalyzer.java:46) ~[jackrabbit-core-2.20.0.jar:2.20.0]
    at org.apache.jackrabbit.core.query.lucene.SearchIndex.<init>(SearchIndex.java:232) ~[jackrabbit-core-2.20.0.jar:2.20.0]
    at info.magnolia.jackrabbit.lucene.SearchIndex.<init>(SearchIndex.java:67) ~[magnolia-core-6.2.2.jar:?]
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.__newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45009) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45012) ~[?:?]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[?:?]
    at java.lang.Class.newInstance(Class.java:584) ~[?:?]

在阅读了一些线程之后,我注意到这是由于带有jackrabbit@h2db:jackrabbit-bundle-h2-search的mgnl repo conf的标准配置造成的。xml,用于设置使用jackrabbit的searchindex@org的jcr存储库的searchindex。阿帕奇。大野兔。果心查询卢森。搜索索引

我花了很多时间在不禁用Searchindex的情况下修复它。有人知道如何解决这个问题来运行magnolia 6.2吗。x与Elastic的新Rest高级客户端

问候这么久,希望任何人都能帮忙:)

注意:对于原型生成@example,我使用以下命令进行设置:

mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -DarchetypeCatalog=https://nexus.magnolia-cms.com/content/groups/public/

共 (0) 个答案