Compare commits
64 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c68f607374 | |||
| fb9c70c51b | |||
| 0c4a641163 | |||
| d7abbc719f | |||
| bd99c90de1 | |||
| b5ad00bccf | |||
| 01f39d6807 | |||
| 19970bacc6 | |||
| d7aed4a8cc | |||
| b708fc10db | |||
| 33c253b071 | |||
| 6bb18b9a0a | |||
| e5252da066 | |||
| a49b1b52a3 | |||
| 7982ff7986 | |||
| 1c9441a1b4 | |||
| e0cc849952 | |||
| 1b50013fc2 | |||
| 5418ef9e03 | |||
| 8d81e499bc | |||
| e457b1678b | |||
| 6c34dc53f3 | |||
| 85b6acebb2 | |||
| 00155c2b31 | |||
| d0020be57d | |||
| 20a6140fe9 | |||
| cdb48c8226 | |||
| 493476567a | |||
| a7c148653f | |||
| 3092db9e7d | |||
| d8917f1cb1 | |||
| cc533b25f1 | |||
| c5231d879d | |||
| 950ca0fc2a | |||
| 95a86f558b | |||
| 8117e5a174 | |||
| 3a9a959918 | |||
| a179dd0643 | |||
| 310ea07c6f | |||
| 34a277cd7d | |||
| 878dc029ec | |||
| c931812c6a | |||
| c514e020b8 | |||
| 31a4ad715f | |||
| 03efe1b910 | |||
| 9d5d2efb40 | |||
| b7266961d9 | |||
| d96cd02572 | |||
| ceb0225850 | |||
| 5c59f73e00 | |||
| 44b1c9e848 | |||
| 1770f98a74 | |||
| bad0a80313 | |||
| 92dd6e8599 | |||
| c793be8ab4 | |||
| 07ae79f9ce | |||
| 47c84b84af | |||
| 5ba1e5dc77 | |||
| 5ddcd55942 | |||
| be4a77ad21 | |||
| 7fa3cb74a1 | |||
| ba9edf8ec8 | |||
| e4a39ae285 | |||
| 7392222793 |
@@ -1,83 +0,0 @@
|
|||||||
= Spring Data for Elasticsearch image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Develocity", link="https://ge.spring.io/scans?search.rootProjectNames=Spring Data Elasticsearch"]
|
|
||||||
|
|
||||||
The primary goal of the https://projects.spring.io/spring-data[Spring Data] project is to make it easier to build Spring-powered applications that use new data access technologies such as non-relational databases, map-reduce frameworks, and cloud based data services.
|
|
||||||
|
|
||||||
The Spring Data Elasticsearch project provides integration with the https://www.elastic.co/[Elasticsearch] search engine.
|
|
||||||
Key functional areas of Spring Data Elasticsearch are a POJO centric model for interacting with Elasticsearch Documents and easily writing a Repository style data access layer.
|
|
||||||
|
|
||||||
This project is lead and maintained by the community.
|
|
||||||
|
|
||||||
== Features
|
|
||||||
|
|
||||||
* Spring configuration support using Java based `@Configuration` classes or an XML namespace for an ES client instances.
|
|
||||||
* `ElasticsearchOperations` class and implementations that increases productivity performing common ES operations.
|
|
||||||
Includes integrated object mapping between documents and POJOs.
|
|
||||||
* Feature Rich Object Mapping integrated with Spring’s Conversion Service
|
|
||||||
* Annotation based mapping metadata
|
|
||||||
* Automatic implementation of `Repository` interfaces including support for custom search methods.
|
|
||||||
* CDI support for repositories
|
|
||||||
|
|
||||||
include::https://raw.githubusercontent.com/spring-projects/spring-data-build/refs/heads/main/etc/readme/code-of-conduct.adoc[]
|
|
||||||
|
|
||||||
== Getting Started
|
|
||||||
|
|
||||||
Here is a quick teaser of an application using Spring Data Repositories in Java:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
public interface PersonRepository extends CrudRepository<Person, Long> {
|
|
||||||
|
|
||||||
List<Person> findByLastname(String lastname);
|
|
||||||
|
|
||||||
List<Person> findByFirstnameLike(String firstname);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class MyService {
|
|
||||||
|
|
||||||
private final PersonRepository repository;
|
|
||||||
|
|
||||||
public MyService(PersonRepository repository) {
|
|
||||||
this.repository = repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doWork() {
|
|
||||||
|
|
||||||
repository.deleteAll();
|
|
||||||
|
|
||||||
Person person = new Person();
|
|
||||||
person.setFirstname("Oliver");
|
|
||||||
person.setLastname("Gierke");
|
|
||||||
repository.save(person);
|
|
||||||
|
|
||||||
List<Person> lastNameResults = repository.findByLastname("Gierke");
|
|
||||||
List<Person> firstNameResults = repository.findByFirstnameLike("Oli");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
=== Using the RestClient
|
|
||||||
|
|
||||||
Please check the https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.clients.configuration[official documentation].
|
|
||||||
|
|
||||||
include::https://raw.githubusercontent.com/spring-projects/spring-data-build/refs/heads/main/etc/readme/dependencies.adoc[]
|
|
||||||
|
|
||||||
**Compatibility Matrix**
|
|
||||||
|
|
||||||
The compatibility between Spring Data Elasticsearch, Elasticsearch client drivers and Spring Boot versions can be found in the https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions[reference documentation].
|
|
||||||
|
|
||||||
To use the Release candidate versions of the upcoming major version, use our Maven milestone repository and declare the appropriate dependency version:
|
|
||||||
|
|
||||||
[source,xml]
|
|
||||||
----
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.data</groupId>
|
|
||||||
<artifactId>spring-data-elasticsearch</artifactId>
|
|
||||||
<version>${version}.RCx</version> <!-- x being 1, 2, ... -->
|
|
||||||
</dependency>
|
|
||||||
----
|
|
||||||
|
|
||||||
include::https://raw.githubusercontent.com/spring-projects/spring-data-build/refs/heads/main/etc/readme/getting-help.adoc[]
|
|
||||||
|
|
||||||
include::https://raw.githubusercontent.com/spring-projects/spring-data-build/refs/heads/main/etc/readme/license.adoc[]
|
|
||||||
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
name: CI Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches: [ main, 'issue/**' ]
|
|
||||||
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-java:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
java-version: [ base, main ]
|
|
||||||
name: Build project
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- name: Setup Java and Maven
|
|
||||||
uses: spring-projects/spring-data-build/actions/setup-maven@main
|
|
||||||
with:
|
|
||||||
java-version: ${{ matrix.java-version }}
|
|
||||||
develocity-access-key: '${{ secrets.DEVELOCITY_ACCESS_KEY }}'
|
|
||||||
- name: Build
|
|
||||||
uses: spring-projects/spring-data-build/actions/maven-build@main
|
|
||||||
env:
|
|
||||||
TESTCONTAINERS_REUSE_ENABLE: true
|
|
||||||
with:
|
|
||||||
settings-xml: '${{ vars.SETTINGS_XML }}'
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# GitHub Actions for CodeQL Scanning
|
|
||||||
|
|
||||||
name: "CodeQL Advanced"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
# https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#schedule
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
codeql-analysis-call:
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
uses: spring-io/github-actions/.github/workflows/codeql-analysis.yml@1
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
name: Snapshots
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches: [ main, 'issue/**' ]
|
|
||||||
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-snapshots:
|
|
||||||
name: Build and deploy snapshots
|
|
||||||
if: ${{ github.repository_owner == 'spring-projects' }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- name: Setup Java and Maven
|
|
||||||
uses: spring-projects/spring-data-build/actions/setup-maven@main
|
|
||||||
with:
|
|
||||||
develocity-access-key: '${{ secrets.DEVELOCITY_ACCESS_KEY }}'
|
|
||||||
- name: Deploy to Artifactory
|
|
||||||
uses: spring-projects/spring-data-build/actions/maven-artifactory-deploy@main
|
|
||||||
env:
|
|
||||||
TESTCONTAINERS_REUSE_ENABLE: true
|
|
||||||
with:
|
|
||||||
build-name: 'spring-data-elasticsearch'
|
|
||||||
username: '${{ secrets.ARTIFACTORY_USERNAME }}'
|
|
||||||
password: '${{ secrets.ARTIFACTORY_PASSWORD }}'
|
|
||||||
context-url: '${{ vars.ARTIFACTORY_CONTEXT_URL }}'
|
|
||||||
repository: '${{ vars.ARTIFACTORY_REPOSITORY }}'
|
|
||||||
project: '${{ vars.ARTIFACTORY_PROJECT }}'
|
|
||||||
settings-xml: '${{ vars.SETTINGS_XML }}'
|
|
||||||
+1
-1
@@ -3,6 +3,6 @@
|
|||||||
<extension>
|
<extension>
|
||||||
<groupId>io.spring.develocity.conventions</groupId>
|
<groupId>io.spring.develocity.conventions</groupId>
|
||||||
<artifactId>develocity-conventions-maven-extension</artifactId>
|
<artifactId>develocity-conventions-maven-extension</artifactId>
|
||||||
<version>0.0.25</version>
|
<version>0.0.22</version>
|
||||||
</extension>
|
</extension>
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|||||||
@@ -8,7 +8,3 @@
|
|||||||
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
|
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
|
||||||
--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
|
--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
|
||||||
--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
|
--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
|
||||||
--add-opens=java.base/java.util=ALL-UNNAMED
|
|
||||||
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
|
|
||||||
--add-opens=java.base/java.text=ALL-UNNAMED
|
|
||||||
--add-opens=java.desktop/java.awt.font=ALL-UNNAMED
|
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
#Tue Jun 02 14:58:35 CEST 2026
|
#Thu Nov 07 09:49:32 CET 2024
|
||||||
distributionUrl=https\://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.zip
|
|
||||||
wrapperUrl=https\://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
|
wrapperUrl=https\://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
|
||||||
|
distributionUrl=https\://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
|
||||||
|
|||||||
@@ -1,5 +1,43 @@
|
|||||||
= Continuous Integration
|
= Continuous Integration
|
||||||
|
|
||||||
|
image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-elasticsearch%2Fmain&subject=2020.0.0%20(main)[link=https://jenkins.spring.io/view/SpringData/job/spring-data-elasticsearch/]
|
||||||
|
image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-elasticsearch%2F4.0.x&subject=Neumann%20(4.0.x)[link=https://jenkins.spring.io/view/SpringData/job/spring-data-elasticsearch/]
|
||||||
|
image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-elasticsearch%2F3.2.x&subject=Moore%20(3.2.x)[link=https://jenkins.spring.io/view/SpringData/job/spring-data-elasticsearch/]
|
||||||
|
|
||||||
== Running CI tasks locally
|
== Running CI tasks locally
|
||||||
|
|
||||||
You can run CI jobs locally using Docker and act[https://nektosact.com/].
|
Since this pipeline is purely Docker-based, it's easy to:
|
||||||
|
|
||||||
|
* Debug what went wrong on your local machine.
|
||||||
|
* Test out a a tweak to your `verify.sh` script before sending it out.
|
||||||
|
* Experiment against a new image before submitting your pull request.
|
||||||
|
|
||||||
|
All of these use cases are great reasons to essentially run what the CI server does on your local machine.
|
||||||
|
|
||||||
|
IMPORTANT: To do this you must have Docker installed on your machine.
|
||||||
|
|
||||||
|
1. `docker run -it --mount type=bind,source="$(pwd)",target=/spring-data-elasticsearch-github adoptopenjdk/openjdk8:latest /bin/bash`
|
||||||
|
+
|
||||||
|
This will launch the Docker image and mount your source code at `spring-data-elasticsearch-github`.
|
||||||
|
+
|
||||||
|
2. `cd spring-data-elasticsearch-github`
|
||||||
|
+
|
||||||
|
Next, run your tests from inside the container:
|
||||||
|
+
|
||||||
|
3. `./mvnw clean dependency:list test -Dsort` (or whatever profile you need to test out)
|
||||||
|
|
||||||
|
Since the container is binding to your source, you can make edits from your IDE and continue to run build jobs.
|
||||||
|
|
||||||
|
If you need to package things up, do this:
|
||||||
|
|
||||||
|
1. `docker run -it -v /var/run/docker.sock:/var/run/docker.sock --mount type=bind,source="$(pwd)",target=/spring-data-elasticsearch-github adoptopenjdk/openjdk8:latest /bin/bash`
|
||||||
|
+
|
||||||
|
This will launch the Docker image and mount your source code at `spring-data-elasticsearch-github`.
|
||||||
|
+
|
||||||
|
2. `cd spring-data-elasticsearch-github`
|
||||||
|
+
|
||||||
|
Next, try to package everything up from inside the container:
|
||||||
|
+
|
||||||
|
3. `./mvnw -Pci,snapshot -Dmaven.test.skip=true clean package`
|
||||||
|
|
||||||
|
NOTE: Docker containers can eat up disk space fast! From time to time, run `docker system prune` to clean out old images.
|
||||||
|
|||||||
Vendored
+132
@@ -0,0 +1,132 @@
|
|||||||
|
def p = [:]
|
||||||
|
node {
|
||||||
|
checkout scm
|
||||||
|
p = readProperties interpolate: true, file: 'ci/pipeline.properties'
|
||||||
|
}
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent none
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
pollSCM 'H/10 * * * *'
|
||||||
|
upstream(upstreamProjects: "spring-data-commons/3.3.x", threshold: hudson.model.Result.SUCCESS)
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
disableConcurrentBuilds()
|
||||||
|
buildDiscarder(logRotator(numToKeepStr: '14'))
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage("test: baseline (main)") {
|
||||||
|
when {
|
||||||
|
beforeAgent(true)
|
||||||
|
anyOf {
|
||||||
|
branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP")
|
||||||
|
not { triggeredBy 'UpstreamCause' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
agent {
|
||||||
|
label 'data'
|
||||||
|
}
|
||||||
|
options { timeout(time: 30, unit: 'MINUTES') }
|
||||||
|
|
||||||
|
environment {
|
||||||
|
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||||
|
DEVELOCITY_ACCESS_KEY = credentials("${p['develocity.access-key']}")
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
docker.withRegistry(p['docker.proxy.registry'], p['docker.proxy.credentials']) {
|
||||||
|
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.docker']) {
|
||||||
|
sh "PROFILE=none JENKINS_USER_NAME=${p['jenkins.user.name']} ci/verify.sh"
|
||||||
|
sh "JENKINS_USER_NAME=${p['jenkins.user.name']} ci/clean.sh"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage("Test other configurations") {
|
||||||
|
when {
|
||||||
|
beforeAgent(true)
|
||||||
|
allOf {
|
||||||
|
branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP")
|
||||||
|
not { triggeredBy 'UpstreamCause' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parallel {
|
||||||
|
stage("test: baseline (next)") {
|
||||||
|
agent {
|
||||||
|
label 'data'
|
||||||
|
}
|
||||||
|
options { timeout(time: 30, unit: 'MINUTES') }
|
||||||
|
environment {
|
||||||
|
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||||
|
DEVELOCITY_ACCESS_KEY = credentials("${p['develocity.access-key']}")
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
docker.withRegistry(p['docker.proxy.registry'], p['docker.proxy.credentials']) {
|
||||||
|
docker.image(p['docker.java.next.image']).inside(p['docker.java.inside.docker']) {
|
||||||
|
sh "PROFILE=none JENKINS_USER_NAME=${p['jenkins.user.name']} ci/verify.sh"
|
||||||
|
sh "JENKINS_USER_NAME=${p['jenkins.user.name']} ci/clean.sh"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Release to artifactory') {
|
||||||
|
when {
|
||||||
|
beforeAgent(true)
|
||||||
|
anyOf {
|
||||||
|
branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP")
|
||||||
|
not { triggeredBy 'UpstreamCause' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
agent {
|
||||||
|
label 'data'
|
||||||
|
}
|
||||||
|
options { timeout(time: 20, unit: 'MINUTES') }
|
||||||
|
environment {
|
||||||
|
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||||
|
DEVELOCITY_ACCESS_KEY = credentials("${p['develocity.access-key']}")
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
docker.withRegistry(p['docker.proxy.registry'], p['docker.proxy.credentials']) {
|
||||||
|
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.docker']) {
|
||||||
|
sh 'MAVEN_OPTS="-Duser.name=' + "${p['jenkins.user.name']}" + ' -Duser.home=/tmp/jenkins-home" ' +
|
||||||
|
"./mvnw -s settings.xml -Pci,artifactory " +
|
||||||
|
"-Ddevelocity.storage.directory=/tmp/jenkins-home/.develocity-root " +
|
||||||
|
"-Dartifactory.server=${p['artifactory.url']} " +
|
||||||
|
"-Dartifactory.username=${ARTIFACTORY_USR} " +
|
||||||
|
"-Dartifactory.password=${ARTIFACTORY_PSW} " +
|
||||||
|
"-Dartifactory.staging-repository=${p['artifactory.repository.snapshot']} " +
|
||||||
|
"-Dartifactory.build-name=spring-data-elasticsearch " +
|
||||||
|
"-Dartifactory.build-number=spring-data-elasticsearch-${BRANCH_NAME}-build-${BUILD_NUMBER} " +
|
||||||
|
"-Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-data-elasticsearch " +
|
||||||
|
"-Dmaven.test.skip=true clean deploy -U -B"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
changed {
|
||||||
|
script {
|
||||||
|
emailext(
|
||||||
|
subject: "[${currentBuild.fullDisplayName}] ${currentBuild.currentResult}",
|
||||||
|
mimeType: 'text/html',
|
||||||
|
recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']],
|
||||||
|
body: "<a href=\"${env.BUILD_URL}\">${currentBuild.fullDisplayName} is reported as ${currentBuild.currentResult}</a>")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
= Spring Data for Elasticsearch image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Develocity", link="https://ge.spring.io/scans?search.rootProjectNames=Spring Data Elasticsearch"]
|
= Spring Data for Elasticsearch image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-elasticsearch%2Fmain&subject=Build[link=https://jenkins.spring.io/view/SpringData/job/spring-data-elasticsearch/] https://gitter.im/spring-projects/spring-data[image:https://badges.gitter.im/spring-projects/spring-data.svg[Gitter]] image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Develocity", link="https://ge.spring.io/scans?search.rootProjectNames=Spring Data Elasticsearch"]
|
||||||
|
|
||||||
The primary goal of the https://projects.spring.io/spring-data[Spring Data] project is to make it easier to build Spring-powered applications that use new data access technologies such as non-relational databases, map-reduce frameworks, and cloud based data services.
|
The primary goal of the https://projects.spring.io/spring-data[Spring Data] project is to make it easier to build Spring-powered applications that use new data access technologies such as non-relational databases, map-reduce frameworks, and cloud based data services.
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ public class MyService {
|
|||||||
|
|
||||||
=== Using the RestClient
|
=== Using the RestClient
|
||||||
|
|
||||||
Please check the https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.clients.configuration[official documentation].
|
Please check the [official documentation](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.clients.configuration).
|
||||||
|
|
||||||
=== Maven configuration
|
=== Maven configuration
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@ Building the documentation builds also the project without running tests.
|
|||||||
$ ./mvnw clean install -Pantora
|
$ ./mvnw clean install -Pantora
|
||||||
----
|
----
|
||||||
|
|
||||||
The generated documentation is available from `target/site/index.html`.
|
The generated documentation is available from `target/antora/site/index.html`.
|
||||||
|
|
||||||
== Examples
|
== Examples
|
||||||
|
|
||||||
|
|||||||
+5
-11
@@ -1,15 +1,9 @@
|
|||||||
= Security Policy
|
# Security Policy
|
||||||
|
|
||||||
== Reporting a Vulnerability
|
## Supported Versions
|
||||||
|
|
||||||
Please, https://github.com/spring-projects/security-advisories/security/advisories/new[open a draft security advisory] if you need to disclose and discuss a security issue in private with the Spring Data team.
|
Please see the https://spring.io/projects/spring-data-elasticsearch[Spring Data Elasticsearch] project page for supported versions.
|
||||||
Note that we only accept reports against https://spring.io/projects/spring-data#support[supported versions].
|
|
||||||
|
|
||||||
For more details, check out our https://spring.io/security-policy[security policy].
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
== JAR signing
|
Please don't raise security vulnerabilities here. Head over to https://pivotal.io/security to learn how to disclose them responsibly.
|
||||||
|
|
||||||
Spring Data JARs released on Maven Central are signed.
|
|
||||||
You'll find more information about the key here: https://spring.io/GPG-KEY-spring.txt
|
|
||||||
|
|
||||||
Versions released prior to 2023 may be signed with a different key.
|
|
||||||
|
|||||||
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
export JENKINS_USER=${JENKINS_USER_NAME}
|
||||||
|
|
||||||
|
MAVEN_OPTS="-Duser.name=${JENKINS_USER} -Duser.home=/tmp/jenkins-home" \
|
||||||
|
./mvnw -s settings.xml clean -Dscan=false -Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-data-elasticsearch -Ddevelocity.storage.directory=/tmp/jenkins-home/.develocity-root
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# Java versions
|
||||||
|
java.main.tag=17.0.13_11-jdk-focal
|
||||||
|
java.next.tag=22.0.2_9-jdk-jammy
|
||||||
|
|
||||||
|
# Docker container images - standard
|
||||||
|
docker.java.main.image=library/eclipse-temurin:${java.main.tag}
|
||||||
|
docker.java.next.image=library/eclipse-temurin:${java.next.tag}
|
||||||
|
|
||||||
|
# Supported versions of MongoDB
|
||||||
|
docker.mongodb.4.4.version=4.4.25
|
||||||
|
docker.mongodb.5.0.version=5.0.21
|
||||||
|
docker.mongodb.6.0.version=6.0.10
|
||||||
|
docker.mongodb.7.0.version=7.0.2
|
||||||
|
|
||||||
|
# Supported versions of Redis
|
||||||
|
docker.redis.6.version=6.2.13
|
||||||
|
docker.redis.7.version=7.2.4
|
||||||
|
|
||||||
|
# Supported versions of Cassandra
|
||||||
|
docker.cassandra.3.version=3.11.16
|
||||||
|
|
||||||
|
# Docker environment settings
|
||||||
|
docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
|
||||||
|
docker.java.inside.docker=-u root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v $HOME:/tmp/jenkins-home
|
||||||
|
|
||||||
|
# Credentials
|
||||||
|
docker.registry=
|
||||||
|
docker.credentials=hub.docker.com-springbuildmaster
|
||||||
|
docker.proxy.registry=https://docker-hub.usw1.packages.broadcom.com
|
||||||
|
docker.proxy.credentials=usw1_packages_broadcom_com-jenkins-token
|
||||||
|
artifactory.credentials=02bd1690-b54f-4c9f-819d-a77cb7a9822c
|
||||||
|
artifactory.url=https://repo.spring.io
|
||||||
|
artifactory.repository.snapshot=libs-snapshot-local
|
||||||
|
develocity.access-key=gradle_enterprise_secret_access_key
|
||||||
|
jenkins.user.name=spring-builds+jenkins
|
||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash -x
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
mkdir -p /tmp/jenkins-home/.m2/spring-data-elasticsearch
|
||||||
|
export JENKINS_USER=${JENKINS_USER_NAME}
|
||||||
|
|
||||||
|
MAVEN_OPTS="-Duser.name=${JENKINS_USER} -Duser.home=/tmp/jenkins-home" \
|
||||||
|
./mvnw -s settings.xml \
|
||||||
|
-P${PROFILE} clean dependency:list verify -Dsort -U -B -Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-data-elasticsearch -Ddevelocity.storage.directory=/tmp/jenkins-home/.develocity-root
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>org.springframework.data</groupId>
|
<groupId>org.springframework.data</groupId>
|
||||||
<artifactId>spring-data-elasticsearch</artifactId>
|
<artifactId>spring-data-elasticsearch</artifactId>
|
||||||
<version>6.1.0</version>
|
<version>5.3.10</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.data.build</groupId>
|
<groupId>org.springframework.data.build</groupId>
|
||||||
<artifactId>spring-data-parent</artifactId>
|
<artifactId>spring-data-parent</artifactId>
|
||||||
<version>4.1.0</version>
|
<version>3.3.10</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<name>Spring Data Elasticsearch</name>
|
<name>Spring Data Elasticsearch</name>
|
||||||
@@ -18,16 +18,16 @@
|
|||||||
<url>https://github.com/spring-projects/spring-data-elasticsearch</url>
|
<url>https://github.com/spring-projects/spring-data-elasticsearch</url>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<springdata.commons>4.1.0</springdata.commons>
|
<springdata.commons>3.3.10</springdata.commons>
|
||||||
|
|
||||||
<!-- version of the ElasticsearchClient -->
|
<!-- version of the ElasticsearchClient -->
|
||||||
<elasticsearch-java>9.4.2</elasticsearch-java>
|
<elasticsearch-java>8.13.4</elasticsearch-java>
|
||||||
<elasticsearch-rest-client>9.4.2</elasticsearch-rest-client>
|
|
||||||
|
|
||||||
<hoverfly>0.20.2</hoverfly>
|
<hoverfly>0.14.4</hoverfly>
|
||||||
<log4j>2.25.4</log4j>
|
<log4j>2.18.0</log4j>
|
||||||
<jsonassert>1.5.3</jsonassert>
|
<jsonassert>1.5.1</jsonassert>
|
||||||
<wiremock>3.9.2</wiremock>
|
<testcontainers>1.18.0</testcontainers>
|
||||||
|
<wiremock>2.35.1</wiremock>
|
||||||
|
|
||||||
<java-module-name>spring.data.elasticsearch</java-module-name>
|
<java-module-name>spring.data.elasticsearch</java-module-name>
|
||||||
|
|
||||||
@@ -41,15 +41,6 @@
|
|||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
<developer>
|
|
||||||
<id>sothawo</id>
|
|
||||||
<name>Peter-Josef Meisch</name>
|
|
||||||
<email>pj.meisch at sothawo.com</email>
|
|
||||||
<roles>
|
|
||||||
<role>Project Lead</role>
|
|
||||||
</roles>
|
|
||||||
<timezone>+1</timezone>
|
|
||||||
</developer>
|
|
||||||
<developer>
|
<developer>
|
||||||
<id>biomedcentral</id>
|
<id>biomedcentral</id>
|
||||||
<name>BioMed Central Development Team</name>
|
<name>BioMed Central Development Team</name>
|
||||||
@@ -82,35 +73,20 @@
|
|||||||
<scm>
|
<scm>
|
||||||
<url>https://github.com/spring-projects/spring-data-elasticsearch</url>
|
<url>https://github.com/spring-projects/spring-data-elasticsearch</url>
|
||||||
<connection>scm:git:git://github.com/spring-projects/spring-data-elasticsearch.git</connection>
|
<connection>scm:git:git://github.com/spring-projects/spring-data-elasticsearch.git</connection>
|
||||||
<developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-data-elasticsearch.git</developerConnection>
|
<developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-data-elasticsearch.git
|
||||||
|
</developerConnection>
|
||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
|
<ciManagement>
|
||||||
|
<system>Bamboo</system>
|
||||||
|
<url>https://build.spring.io/browse/SPRINGDATAES</url>
|
||||||
|
</ciManagement>
|
||||||
|
|
||||||
<issueManagement>
|
<issueManagement>
|
||||||
<system>GitHub</system>
|
<system>GitHub</system>
|
||||||
<url>https://github.com/spring-projects/spring-data-elasticsearch/issues</url>
|
<url>https://github.com/spring-projects/spring-data-elasticsearch/issues</url>
|
||||||
</issueManagement>
|
</issueManagement>
|
||||||
|
|
||||||
|
|
||||||
<dependencyManagement>
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.commons</groupId>
|
|
||||||
<artifactId>commons-lang3</artifactId>
|
|
||||||
<version>3.19.0</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-io</groupId>
|
|
||||||
<artifactId>commons-io</artifactId>
|
|
||||||
<version>2.20.0</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
</dependencyManagement>
|
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<!-- Spring -->
|
<!-- Spring -->
|
||||||
@@ -155,53 +131,30 @@
|
|||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- the old RestCLient is an optional dependency for user that still want to use it-->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.elasticsearch.client</groupId>
|
<groupId>org.elasticsearch.client</groupId>
|
||||||
<artifactId>elasticsearch-rest-client</artifactId>
|
<artifactId>elasticsearch-rest-client</artifactId> <!-- is Apache 2-->
|
||||||
<version>${elasticsearch-rest-client}</version>
|
<version>${elasticsearch-java}</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<groupId>commons-logging</groupId>
|
<groupId>commons-logging</groupId>
|
||||||
<artifactId>commons-logging</artifactId>
|
<artifactId>commons-logging</artifactId>
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.querydsl</groupId>
|
|
||||||
<artifactId>querydsl-core</artifactId>
|
|
||||||
<version>${querydsl}</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Jackson JSON Mapper -->
|
<!-- Jackson JSON Mapper -->
|
||||||
<dependency>
|
|
||||||
<groupId>tools.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>tools.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Version 2 to use with the legacy RestClient -->
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-core</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
<scope>provided</scope>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
<scope>provided</scope>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- CDI -->
|
<!-- CDI -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.interceptor</groupId>
|
<groupId>javax.interceptor</groupId>
|
||||||
<artifactId>javax.interceptor-api</artifactId>
|
<artifactId>javax.interceptor-api</artifactId>
|
||||||
@@ -275,14 +228,6 @@
|
|||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.jetbrains</groupId>
|
|
||||||
<artifactId>annotations</artifactId>
|
|
||||||
<version>26.0.2-1</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>log4j-over-slf4j</artifactId>
|
<artifactId>log4j-over-slf4j</artifactId>
|
||||||
@@ -310,8 +255,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wiremock</groupId>
|
<groupId>com.github.tomakehurst</groupId>
|
||||||
<artifactId>wiremock</artifactId>
|
<artifactId>wiremock-jre8</artifactId>
|
||||||
<version>${wiremock}</version>
|
<version>${wiremock}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
@@ -334,6 +279,21 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Upgrade xbean to 4.5 to prevent incompatibilities due to ASM versions -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.xbean</groupId>
|
||||||
|
<artifactId>xbean-asm5-shaded</artifactId>
|
||||||
|
<version>4.5</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>javax.servlet-api</artifactId>
|
||||||
|
<version>3.1.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mockito</groupId>
|
<groupId>org.mockito</groupId>
|
||||||
<artifactId>mockito-junit-jupiter</artifactId>
|
<artifactId>mockito-junit-jupiter</artifactId>
|
||||||
@@ -343,7 +303,16 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.testcontainers</groupId>
|
<groupId>org.testcontainers</groupId>
|
||||||
<artifactId>testcontainers-elasticsearch</artifactId>
|
<artifactId>elasticsearch</artifactId>
|
||||||
|
<version>${testcontainers}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--we need Murmur3Hash in a test, before 5.2 we had it from the old Elasticsearch dependency -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-codec</groupId>
|
||||||
|
<artifactId>commons-codec</artifactId>
|
||||||
|
<version>1.15</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -354,13 +323,7 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
</dependencies>
|
||||||
<groupId>io.micrometer</groupId>
|
|
||||||
<artifactId>micrometer-observation-test</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
|
||||||
|
https://maven.apache.org/xsd/settings-1.0.0.xsd">
|
||||||
|
|
||||||
|
<servers>
|
||||||
|
<server>
|
||||||
|
<id>spring-plugins-release</id>
|
||||||
|
<username>${env.ARTIFACTORY_USR}</username>
|
||||||
|
<password>${env.ARTIFACTORY_PSW}</password>
|
||||||
|
</server>
|
||||||
|
<server>
|
||||||
|
<id>spring-libs-snapshot</id>
|
||||||
|
<username>${env.ARTIFACTORY_USR}</username>
|
||||||
|
<password>${env.ARTIFACTORY_PSW}</password>
|
||||||
|
</server>
|
||||||
|
<server>
|
||||||
|
<id>spring-libs-milestone</id>
|
||||||
|
<username>${env.ARTIFACTORY_USR}</username>
|
||||||
|
<password>${env.ARTIFACTORY_PSW}</password>
|
||||||
|
</server>
|
||||||
|
<server>
|
||||||
|
<id>spring-libs-release</id>
|
||||||
|
<username>${env.ARTIFACTORY_USR}</username>
|
||||||
|
<password>${env.ARTIFACTORY_PSW}</password>
|
||||||
|
</server>
|
||||||
|
</servers>
|
||||||
|
|
||||||
|
</settings>
|
||||||
@@ -17,7 +17,7 @@ content:
|
|||||||
- url: https://github.com/spring-projects/spring-data-commons
|
- url: https://github.com/spring-projects/spring-data-commons
|
||||||
# Refname matching:
|
# Refname matching:
|
||||||
# https://docs.antora.org/antora/latest/playbook/content-refname-matching/
|
# https://docs.antora.org/antora/latest/playbook/content-refname-matching/
|
||||||
branches: [ main ]
|
branches: [ main, 3.2.x ]
|
||||||
start_path: src/main/antora
|
start_path: src/main/antora
|
||||||
asciidoc:
|
asciidoc:
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
@@ -6,8 +6,12 @@ nav:
|
|||||||
ext:
|
ext:
|
||||||
collector:
|
collector:
|
||||||
- run:
|
- run:
|
||||||
command: ./mvnw -B validate process-resources dependency:unpack -am -Pantora-process-resources
|
command: ./mvnw validate process-resources -am -Pantora-process-resources
|
||||||
local: true
|
local: true
|
||||||
scan:
|
scan:
|
||||||
- dir: target/classes/
|
dir: target/classes/
|
||||||
- dir: target/antora/
|
- run:
|
||||||
|
command: ./mvnw package -Pdistribute
|
||||||
|
local: true
|
||||||
|
scan:
|
||||||
|
dir: target/antora
|
||||||
|
|||||||
@@ -10,10 +10,6 @@
|
|||||||
*** xref:migration-guides/migration-guide-5.0-5.1.adoc[]
|
*** xref:migration-guides/migration-guide-5.0-5.1.adoc[]
|
||||||
*** xref:migration-guides/migration-guide-5.1-5.2.adoc[]
|
*** xref:migration-guides/migration-guide-5.1-5.2.adoc[]
|
||||||
*** xref:migration-guides/migration-guide-5.2-5.3.adoc[]
|
*** xref:migration-guides/migration-guide-5.2-5.3.adoc[]
|
||||||
*** xref:migration-guides/migration-guide-5.3-5.4.adoc[]
|
|
||||||
*** xref:migration-guides/migration-guide-5.4-5.5.adoc[]
|
|
||||||
*** xref:migration-guides/migration-guide-5.5-6.0.adoc[]
|
|
||||||
|
|
||||||
|
|
||||||
* xref:elasticsearch.adoc[]
|
* xref:elasticsearch.adoc[]
|
||||||
** xref:elasticsearch/clients.adoc[]
|
** xref:elasticsearch/clients.adoc[]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
Spring Data support for Elasticsearch contains a wide range of features:
|
Spring Data support for Elasticsearch contains a wide range of features:
|
||||||
|
|
||||||
* Spring configuration support for various xref:elasticsearch/clients.adoc[Elasticsearch clients].
|
* Spring configuration support for various xref:elasticsearch/clients.adoc[Elasticsearch clients].
|
||||||
* The xref:elasticsearch/template.adoc[`ElasticsearchTemplate` and `ReactiveElasticsearchTemplate`] helper classes that provide object mapping between Elasticsearch index operations and POJOs.
|
* The xref:elasticsearch/template.adoc[`ElasticsearchTemplate` and `ReactiveElasticsearchTemplate`] helper classes that provide object mapping between ES index operations and POJOs.
|
||||||
* xref:elasticsearch/template.adoc#exception-translation[Exception translation] into Spring's portable {springDocsUrl}data-access.html#dao-exceptions[Data Access Exception Hierarchy].
|
* xref:elasticsearch/template.adoc#exception-translation[Exception translation] into Spring's portable {springDocsUrl}data-access.html#dao-exceptions[Data Access Exception Hierarchy].
|
||||||
* Feature rich xref:elasticsearch/object-mapping.adoc[object mapping] integrated with _Spring's_ {springDocsUrl}core.html#core-convert[Conversion Service].
|
* Feature rich xref:elasticsearch/object-mapping.adoc[object mapping] integrated with _Spring's_ {springDocsUrl}core.html#core-convert[Conversion Service].
|
||||||
* xref:elasticsearch/object-mapping.adoc#elasticsearch.mapping.meta-model.annotations[Annotation-based mapping] metadata that is extensible to support other metadata formats.
|
* xref:elasticsearch/object-mapping.adoc#elasticsearch.mapping.meta-model.annotations[Annotation-based mapping] metadata that is extensible to support other metadata formats.
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ In order for the auditing code to be able to decide whether an entity instance i
|
|||||||
----
|
----
|
||||||
package org.springframework.data.domain;
|
package org.springframework.data.domain;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
public interface Persistable<ID> {
|
public interface Persistable<ID> {
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -81,5 +81,5 @@ class MyConfiguration {
|
|||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
If your code contains more than one `AuditorAware` bean for different types, you must provide the name of the bean to use as an argument to the `auditorAwareRef` parameter of the
|
If your code contains more than one `AuditorAware` bean for different types, you must provide the name of the bean to use as an argument to the `auditorAwareRef` parameter of the
|
||||||
`@EnableElasticsearchAuditing` annotation.
|
`@EnableElasticsearchAuditing` annotation.
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ This chapter illustrates configuration and usage of supported Elasticsearch clie
|
|||||||
Spring Data Elasticsearch operates upon an Elasticsearch client (provided by Elasticsearch client libraries) that is connected to a single Elasticsearch node or a cluster.
|
Spring Data Elasticsearch operates upon an Elasticsearch client (provided by Elasticsearch client libraries) that is connected to a single Elasticsearch node or a cluster.
|
||||||
Although the Elasticsearch Client can be used directly to work with the cluster, applications using Spring Data Elasticsearch normally use the higher level abstractions of xref:elasticsearch/template.adoc[Elasticsearch Operations] and xref:elasticsearch/repositories/elasticsearch-repositories.adoc[Elasticsearch Repositories].
|
Although the Elasticsearch Client can be used directly to work with the cluster, applications using Spring Data Elasticsearch normally use the higher level abstractions of xref:elasticsearch/template.adoc[Elasticsearch Operations] and xref:elasticsearch/repositories/elasticsearch-repositories.adoc[Elasticsearch Repositories].
|
||||||
|
|
||||||
[[elasticsearch.clients.rest5client]]
|
[[elasticsearch.clients.restclient]]
|
||||||
== Imperative Rest5Client
|
== Imperative Rest Client
|
||||||
|
|
||||||
To use the imperative (non-reactive) Rest5Client - the default client provided by the Elasticsearch Java client library from version 9 on -, a configuration bean must be configured like this:
|
To use the imperative (non-reactive) client, a configuration bean must be configured like this:
|
||||||
|
|
||||||
====
|
====
|
||||||
[source,java]
|
[source,java]
|
||||||
@@ -31,7 +31,7 @@ public class MyClientConfig extends ElasticsearchConfiguration {
|
|||||||
<.> for a detailed description of the builder methods see xref:elasticsearch/clients.adoc#elasticsearch.clients.configuration[Client Configuration]
|
<.> for a detailed description of the builder methods see xref:elasticsearch/clients.adoc#elasticsearch.clients.configuration[Client Configuration]
|
||||||
====
|
====
|
||||||
|
|
||||||
The javadoc:org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration[] class allows further configuration by overriding for example the `jsonpMapper()` or `transportOptions()` methods.
|
The javadoc:org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration[]] class allows further configuration by overriding for example the `jsonpMapper()` or `transportOptions()` methods.
|
||||||
|
|
||||||
|
|
||||||
The following beans can then be injected in other Spring components:
|
The following beans can then be injected in other Spring components:
|
||||||
@@ -39,85 +39,7 @@ The following beans can then be injected in other Spring components:
|
|||||||
====
|
====
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;@Autowired
|
||||||
|
|
||||||
@Autowired
|
|
||||||
ElasticsearchOperations operations; <.>
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
ElasticsearchClient elasticsearchClient; <.>
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
Rest5Client rest5Client; <.>
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
JsonpMapper jsonpMapper; <.>
|
|
||||||
----
|
|
||||||
|
|
||||||
<.> an implementation of javadoc:org.springframework.data.elasticsearch.core.ElasticsearchOperations[]
|
|
||||||
<.> the `co.elastic.clients.elasticsearch.ElasticsearchClient` that is used.
|
|
||||||
<.> the low level `Rest5Client` from the Elasticsearch libraries
|
|
||||||
<.> the `JsonpMapper` user by the Elasticsearch `Transport`
|
|
||||||
====
|
|
||||||
|
|
||||||
Basically one should just use the javadoc:org.springframework.data.elasticsearch.core.ElasticsearchOperations[] to interact with the Elasticsearch cluster.
|
|
||||||
When using repositories, this instance is used under the hood as well.
|
|
||||||
|
|
||||||
[[elasticsearch.clients.restclient]]
|
|
||||||
== Deprecated Imperative RestClient
|
|
||||||
|
|
||||||
To use the imperative (non-reactive) RestClient - deprecated since version 6 - , the following dependency needs to be added, adapt the correct version. The exclusion is needed in a Spring Boot application:
|
|
||||||
====
|
|
||||||
[source,xml]
|
|
||||||
----
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.elasticsearch.client</groupId>
|
|
||||||
<artifactId>elasticsearch-rest-client</artifactId>
|
|
||||||
<version>${elasticsearch-client.version}</version>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>commons-logging</groupId>
|
|
||||||
<artifactId>commons-logging</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
The configuration bean must then be configured like this:
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
import org.springframework.data.elasticsearch.client.elc.ElasticsearchLegacyRestClientConfiguration;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class MyClientConfig extends ElasticsearchLegacyRestClientConfiguration {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientConfiguration clientConfiguration() {
|
|
||||||
return ClientConfiguration.builder() <.>
|
|
||||||
.connectedTo("localhost:9200")
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
<.> for a detailed description of the builder methods see xref:elasticsearch/clients.adoc#elasticsearch.clients.configuration[Client Configuration]
|
|
||||||
====
|
|
||||||
|
|
||||||
The javadoc:org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration[] class allows further configuration by overriding for example the `jsonpMapper()` or `transportOptions()` methods.
|
|
||||||
|
|
||||||
|
|
||||||
The following beans can then be injected in other Spring components:
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
ElasticsearchOperations operations; <.>
|
ElasticsearchOperations operations; <.>
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -139,8 +61,8 @@ JsonpMapper jsonpMapper; <.>
|
|||||||
Basically one should just use the javadoc:org.springframework.data.elasticsearch.core.ElasticsearchOperations[] to interact with the Elasticsearch cluster.
|
Basically one should just use the javadoc:org.springframework.data.elasticsearch.core.ElasticsearchOperations[] to interact with the Elasticsearch cluster.
|
||||||
When using repositories, this instance is used under the hood as well.
|
When using repositories, this instance is used under the hood as well.
|
||||||
|
|
||||||
[[elasticsearch.clients.reactiverest5client]]
|
[[elasticsearch.clients.reactiverestclient]]
|
||||||
== Reactive Rest5Client
|
== Reactive Rest Client
|
||||||
|
|
||||||
When working with the reactive stack, the configuration must be derived from a different class:
|
When working with the reactive stack, the configuration must be derived from a different class:
|
||||||
|
|
||||||
@@ -171,69 +93,6 @@ The following beans can then be injected in other Spring components:
|
|||||||
====
|
====
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
ReactiveElasticsearchOperations operations; <.>
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
ReactiveElasticsearchClient elasticsearchClient; <.>
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
Rest5Client rest5Client; <.>
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
JsonpMapper jsonpMapper; <.>
|
|
||||||
----
|
|
||||||
|
|
||||||
the following can be injected:
|
|
||||||
|
|
||||||
<.> an implementation of javadoc:org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations[]
|
|
||||||
<.> the `org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient` that is used.
|
|
||||||
This is a reactive implementation based on the Elasticsearch client implementation.
|
|
||||||
<.> the low level `RestClient` from the Elasticsearch libraries
|
|
||||||
<.> the `JsonpMapper` user by the Elasticsearch `Transport`
|
|
||||||
====
|
|
||||||
|
|
||||||
Basically one should just use the javadoc:org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations[] to interact with the Elasticsearch cluster.
|
|
||||||
When using repositories, this instance is used under the hood as well.
|
|
||||||
|
|
||||||
[[elasticsearch.clients.reactiverestclient]]
|
|
||||||
== Deprecated Reactive RestClient
|
|
||||||
|
|
||||||
See the section above for the imperative code to use the deprecated RestClient for the necessary dependencies to include.
|
|
||||||
|
|
||||||
When working with the reactive stack, the configuration must be derived from a different class:
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchLegacyRestClientConfiguration;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class MyClientConfig extends ReactiveElasticsearchLegacyRestClientConfiguration {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientConfiguration clientConfiguration() {
|
|
||||||
return ClientConfiguration.builder() <.>
|
|
||||||
.connectedTo("localhost:9200")
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
<.> for a detailed description of the builder methods see xref:elasticsearch/clients.adoc#elasticsearch.clients.configuration[Client Configuration]
|
|
||||||
====
|
|
||||||
|
|
||||||
The javadoc:org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchConfiguration[] class allows further configuration by overriding for example the `jsonpMapper()` or `transportOptions()` methods.
|
|
||||||
|
|
||||||
The following beans can then be injected in other Spring components:
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
ReactiveElasticsearchOperations operations; <.>
|
ReactiveElasticsearchOperations operations; <.>
|
||||||
|
|
||||||
@@ -302,7 +161,7 @@ ClientConfiguration clientConfiguration = ClientConfiguration.builder()
|
|||||||
|
|
||||||
<.> Define default headers, if they need to be customized
|
<.> Define default headers, if they need to be customized
|
||||||
<.> Use the builder to provide cluster addresses, set default `HttpHeaders` or enable SSL.
|
<.> Use the builder to provide cluster addresses, set default `HttpHeaders` or enable SSL.
|
||||||
<.> Optionally enable SSL.There exist overloads of this function that can take a `SSLContext` or as an alternative the fingerprint of the certificate as it is output by Elasticsearch on startup (since version 8).
|
<.> Optionally enable SSL.There exist overloads of this function that can take a `SSLContext` or as an alternative the fingerprint of the certificate as it is output by Elasticsearch 8 on startup.
|
||||||
<.> Optionally set a proxy.
|
<.> Optionally set a proxy.
|
||||||
<.> Optionally set a path prefix, mostly used when different clusters a behind some reverse proxy.
|
<.> Optionally set a path prefix, mostly used when different clusters a behind some reverse proxy.
|
||||||
<.> Set the connection timeout.
|
<.> Set the connection timeout.
|
||||||
@@ -324,25 +183,8 @@ In the case this is not enough, the user can add callback functions by using the
|
|||||||
|
|
||||||
The following callbacks are provided:
|
The following callbacks are provided:
|
||||||
|
|
||||||
[[elasticsearch.clients.configuration.callbacks.rest5]]
|
|
||||||
==== Configuration of the low level Elasticsearch `Rest5Client`:
|
|
||||||
|
|
||||||
This callback provides a `org.elasticsearch.client.RestClientBuilder` that can be used to configure the Elasticsearch
|
|
||||||
`Rest5Client`:
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
ClientConfiguration.builder()
|
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
|
||||||
.withClientConfigurer(Rest5Clients.ElasticsearchRest5ClientConfigurationCallback.from(restClientBuilder -> {
|
|
||||||
// configure the Elasticsearch Rest5Client
|
|
||||||
return restClientBuilder;
|
|
||||||
}))
|
|
||||||
.build();
|
|
||||||
----
|
|
||||||
====
|
|
||||||
[[elasticsearch.clients.configuration.callbacks.rest]]
|
[[elasticsearch.clients.configuration.callbacks.rest]]
|
||||||
==== Configuration of the deprecated low level Elasticsearch `RestClient`:
|
==== Configuration of the low level Elasticsearch `RestClient`:
|
||||||
|
|
||||||
This callback provides a `org.elasticsearch.client.RestClientBuilder` that can be used to configure the Elasticsearch
|
This callback provides a `org.elasticsearch.client.RestClientBuilder` that can be used to configure the Elasticsearch
|
||||||
`RestClient`:
|
`RestClient`:
|
||||||
@@ -351,7 +193,7 @@ This callback provides a `org.elasticsearch.client.RestClientBuilder` that can b
|
|||||||
----
|
----
|
||||||
ClientConfiguration.builder()
|
ClientConfiguration.builder()
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
.connectedTo("localhost:9200", "localhost:9291")
|
||||||
.withClientConfigurer(RestClients.ElasticsearchRestClientConfigurationCallback.from(restClientBuilder -> {
|
.withClientConfigurer(ElasticsearchClients.ElasticsearchRestClientConfigurationCallback.from(restClientBuilder -> {
|
||||||
// configure the Elasticsearch RestClient
|
// configure the Elasticsearch RestClient
|
||||||
return restClientBuilder;
|
return restClientBuilder;
|
||||||
}))
|
}))
|
||||||
@@ -359,29 +201,10 @@ ClientConfiguration.builder()
|
|||||||
----
|
----
|
||||||
====
|
====
|
||||||
|
|
||||||
[[elasticsearch.clients.configurationcallbacks.httpasync5]]
|
|
||||||
==== Configuration of the HttpAsyncClient used by the low level Elasticsearch `Rest5Client`:
|
|
||||||
|
|
||||||
This callback provides a `org.apache.hc.client5.http.impl.async.HttpAsyncClientBuilder` to configure the HttpClient that is
|
|
||||||
used by the `Rest5Client`.
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
ClientConfiguration.builder()
|
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
|
||||||
.withClientConfigurer(Rest5Clients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
|
|
||||||
// configure the HttpAsyncClient
|
|
||||||
return httpAsyncClientBuilder;
|
|
||||||
}))
|
|
||||||
.build();
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
[[elasticsearch.clients.configurationcallbacks.httpasync]]
|
[[elasticsearch.clients.configurationcallbacks.httpasync]]
|
||||||
==== Configuration of the HttpAsyncClient used by the deprecated low level Elasticsearch `RestClient`:
|
==== Configuration of the HttpAsyncClient used by the low level Elasticsearch `RestClient`:
|
||||||
|
|
||||||
This callback provides a `org.apache.http.impl.nio.client.HttpAsyncClientBuilder` to configure the HttpClient that is
|
This callback provides a `org.apache.http.impl.nio.client.HttpAsyncClientBuilder` to configure the HttpCLient that is
|
||||||
used by the `RestClient`.
|
used by the `RestClient`.
|
||||||
|
|
||||||
====
|
====
|
||||||
@@ -389,7 +212,7 @@ used by the `RestClient`.
|
|||||||
----
|
----
|
||||||
ClientConfiguration.builder()
|
ClientConfiguration.builder()
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
.connectedTo("localhost:9200", "localhost:9291")
|
||||||
.withClientConfigurer(RestClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
|
.withClientConfigurer(ElasticsearchClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
|
||||||
// configure the HttpAsyncClient
|
// configure the HttpAsyncClient
|
||||||
return httpAsyncClientBuilder;
|
return httpAsyncClientBuilder;
|
||||||
}))
|
}))
|
||||||
@@ -397,92 +220,15 @@ ClientConfiguration.builder()
|
|||||||
----
|
----
|
||||||
====
|
====
|
||||||
|
|
||||||
[[elasticsearch.clients.configurationcallbacks.connectionconfig]]
|
|
||||||
==== Configuration of the ConnectionConfig used by the low level Elasticsearch `Rest5Client`:
|
|
||||||
|
|
||||||
This callback provides a `org.apache.hc.client5.http.config.ConnectionConfig` to configure the connection that is
|
|
||||||
used by the `Rest5Client`.
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
ClientConfiguration.builder()
|
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
|
||||||
.withClientConfigurer(Rest5Clients.ElasticsearchConnectionConfigurationCallback.from(connectionConfigBuilder -> {
|
|
||||||
// configure the connection
|
|
||||||
return connectionConfigBuilder;
|
|
||||||
}))
|
|
||||||
.build();
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
[[elasticsearch.clients.configurationcallbacks.connectioncmanager]]
|
|
||||||
==== Configuration of the ConnectionManager used by the low level Elasticsearch `Rest5Client`:
|
|
||||||
|
|
||||||
This callback provides a `org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder` to configure the connection manager that is
|
|
||||||
used by the `Rest5Client`.
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
ClientConfiguration.builder()
|
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
|
||||||
.withClientConfigurer(Rest5Clients.ElasticsearchConnectionManagerCallback.from(connectionManagerBuilder -> {
|
|
||||||
// configure the connection manager
|
|
||||||
return connectionManagerBuilder;
|
|
||||||
}))
|
|
||||||
.build();
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
[[elasticsearch.clients.configurationcallbacks.requestconfig]]
|
|
||||||
==== Configuration of the RequestConfig used by the low level Elasticsearch `Rest5Client`:
|
|
||||||
|
|
||||||
This callback provides a `org.apache.hc.client5.http.config.RequestConfig` to configure the RequestConfig that is
|
|
||||||
used by the `Rest5Client`.
|
|
||||||
|
|
||||||
====
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
ClientConfiguration.builder()
|
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
|
||||||
.withClientConfigurer(Rest5Clients.ElasticsearchRequestConfigCallback.from(requestConfigBuilder -> {
|
|
||||||
// configure the request config
|
|
||||||
return requestConfigBuilder;
|
|
||||||
}))
|
|
||||||
.build();
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
[[elasticsearch.clients.logging]]
|
[[elasticsearch.clients.logging]]
|
||||||
== Client Logging
|
== Client Logging
|
||||||
|
|
||||||
To see what is actually sent to and received from the server `Request` / `Response` logging on the transport level needs to be turned on as outlined in the snippet below.
|
To see what is actually sent to and received from the server `Request` / `Response` logging on the transport level needs to be turned on as outlined in the snippet below.
|
||||||
This can be enabled in the Elasticsearch client by setting the level of the `co.elastic.clients.transport.rest5_client.low_level.Request` package to "trace" (see
|
This can be enabled in the Elasticsearch client by setting the level of the `tracer` package to "trace" (see
|
||||||
https://www.elastic.co/docs/reference/elasticsearch/clients/java/transport/rest5-client/usage/logging)
|
https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/java-rest-low-usage-logging.html)
|
||||||
|
|
||||||
.Enable transport layer logging
|
.Enable transport layer logging
|
||||||
[tabs]
|
|
||||||
======
|
|
||||||
XML::
|
|
||||||
+
|
|
||||||
[source,xml]
|
[source,xml]
|
||||||
----
|
----
|
||||||
<logger name="co.elastic.clients.transport.rest5_client.low_level.Request" level="trace"/>
|
<logger name="tracer" level="trace"/>
|
||||||
----
|
----
|
||||||
|
|
||||||
yml::
|
|
||||||
+
|
|
||||||
[source,yml]
|
|
||||||
----
|
|
||||||
logging.level:
|
|
||||||
co.elastic.clients.transport.rest5_client.low_level.Request: trace
|
|
||||||
----
|
|
||||||
|
|
||||||
ini::
|
|
||||||
+
|
|
||||||
[source,ini]
|
|
||||||
----
|
|
||||||
logging.level.co.elastic.clients.transport.rest5_client.low_level.Request=trace
|
|
||||||
----
|
|
||||||
======
|
|
||||||
|
|||||||
@@ -1,38 +1,10 @@
|
|||||||
[[new-features]]
|
[[new-features]]
|
||||||
= What's new
|
= What's new
|
||||||
|
|
||||||
[[new-features.6-1-0]]
|
[[new-features.5-3-1]]
|
||||||
== New in Spring Data Elasticsearch 6.1
|
== New in Spring Data Elasticsearch 5.3.1
|
||||||
|
|
||||||
* Upgrade to Elasticsearch 9.4.2
|
* Upgrade to Elasticsearch 8.13.4.
|
||||||
* Add support to use `IndexCoordinates` as repository query parameter
|
|
||||||
* Add support for includeNamedQueriesScore in Query
|
|
||||||
* Add support for Micrometer observation.
|
|
||||||
|
|
||||||
[[new-features.6-0-0]]
|
|
||||||
== New in Spring Data Elasticsearch 6.0
|
|
||||||
|
|
||||||
* Upgrade to Spring 7
|
|
||||||
* Switch to jspecify nullability annotations
|
|
||||||
* Upgrade to Elasticsearch 9.2.1
|
|
||||||
* Use the new Elasticsearch Rest5Client as default
|
|
||||||
* Add support for SpEL expressions in the `settingPath` parameter of the `@Setting` annotation
|
|
||||||
|
|
||||||
|
|
||||||
[[new-features.5-5-0]]
|
|
||||||
== New in Spring Data Elasticsearch 5.5
|
|
||||||
|
|
||||||
* Upgrade to Elasticsearch 8.18.1.
|
|
||||||
* Add support for the `@SearchTemplateQuery` annotation on repository methods.
|
|
||||||
* Scripted field properties of type collection can be populated from scripts returning arrays.
|
|
||||||
|
|
||||||
[[new-features.5-4-0]]
|
|
||||||
== New in Spring Data Elasticsearch 5.4
|
|
||||||
|
|
||||||
* Upgrade to Elasticsearch 8.15.3.
|
|
||||||
* Allow to customize the mapped type name for `@InnerField` and `@Field` annotations.
|
|
||||||
* Support for Elasticsearch SQL.
|
|
||||||
* Add support for retrieving request executionDuration.
|
|
||||||
|
|
||||||
[[new-features.5-3-0]]
|
[[new-features.5-3-0]]
|
||||||
== New in Spring Data Elasticsearch 5.3
|
== New in Spring Data Elasticsearch 5.3
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ When creating Elasticsearch indices with Spring Data Elasticsearch different ind
|
|||||||
The following arguments are available:
|
The following arguments are available:
|
||||||
|
|
||||||
* `useServerConfiguration` does not send any settings parameters, so the Elasticsearch server configuration determines them.
|
* `useServerConfiguration` does not send any settings parameters, so the Elasticsearch server configuration determines them.
|
||||||
* `settingPath` refers to a JSON file defining the settings that must be resolvable in the classpath, it is possible to use a SpEL expression here
|
* `settingPath` refers to a JSON file defining the settings that must be resolvable in the classpath
|
||||||
* `shards` the number of shards to use, defaults to _1_
|
* `shards` the number of shards to use, defaults to _1_
|
||||||
* `replicas` the number of replicas, defaults to _1_
|
* `replicas` the number of replicas, defaults to _1_
|
||||||
* `refreshIntervall`, defaults to _"1s"_
|
* `refreshIntervall`, defaults to _"1s"_
|
||||||
@@ -365,8 +365,6 @@ operations.putScript( <.>
|
|||||||
|
|
||||||
To use a search template in a search query, Spring Data Elasticsearch provides the `SearchTemplateQuery`, an implementation of the `org.springframework.data.elasticsearch.core.query.Query` interface.
|
To use a search template in a search query, Spring Data Elasticsearch provides the `SearchTemplateQuery`, an implementation of the `org.springframework.data.elasticsearch.core.query.Query` interface.
|
||||||
|
|
||||||
NOTE: Although `SearchTemplateQuery` is an implementation of the `Query` interface, not all of the functionality provided by the base class is available for a `SearchTemplateQuery` like setting a `Pageable` or a `Sort`. Values for this functionality must be added to the stored script like shown in the following example for paging parameters. If these values are set on the `Query` object, they will be ignored.
|
|
||||||
|
|
||||||
In the following code, we will add a call using a search template query to a custom repository implementation (see
|
In the following code, we will add a call using a search template query to a custom repository implementation (see
|
||||||
xref:repositories/custom-implementations.adoc[]) as an example how this can be integrated into a repository call.
|
xref:repositories/custom-implementations.adoc[]) as an example how this can be integrated into a repository call.
|
||||||
|
|
||||||
@@ -451,3 +449,4 @@ var query = Query.findAll().addSort(Sort.by(order));
|
|||||||
About the filter query: It is not possible to use a `CriteriaQuery` here, as this query would be converted into a Elasticsearch nested query which does not work in the filter context. So only `StringQuery` or `NativeQuery` can be used here. When using one of these, like the term query above, the Elasticsearch field names must be used, so take care, when these are redefined with the `@Field(name="...")` definition.
|
About the filter query: It is not possible to use a `CriteriaQuery` here, as this query would be converted into a Elasticsearch nested query which does not work in the filter context. So only `StringQuery` or `NativeQuery` can be used here. When using one of these, like the term query above, the Elasticsearch field names must be used, so take care, when these are redefined with the `@Field(name="...")` definition.
|
||||||
|
|
||||||
For the definition of the order path and the nested paths, the Java entity property names should be used.
|
For the definition of the order path and the nested paths, the Java entity property names should be used.
|
||||||
|
|
||||||
|
|||||||
+8
-38
@@ -10,9 +10,7 @@ The Elasticsearch module supports all basic query building feature as string que
|
|||||||
=== Declared queries
|
=== Declared queries
|
||||||
|
|
||||||
Deriving the query from the method name is not always sufficient and/or may result in unreadable method names.
|
Deriving the query from the method name is not always sufficient and/or may result in unreadable method names.
|
||||||
In this case one might make use of the `@Query` annotation (see xref:elasticsearch/repositories/elasticsearch-repository-queries.adoc#elasticsearch.query-methods.at-query[Using the @Query Annotation] ).
|
In this case one might make use of the `@Query` annotation (see xref:elasticsearch/repositories/elasticsearch-repository-queries.adoc#elasticsearch.query-methods.at-query[Using @Query Annotation] ).
|
||||||
|
|
||||||
Another possibility is the use of a search-template, (see xref:elasticsearch/repositories/elasticsearch-repository-queries.adoc#elasticsearch.query-methods.at-searchtemplate-query[Using the @SearchTemplateQuery Annotation] ).
|
|
||||||
|
|
||||||
[[elasticsearch.query-methods.criterions]]
|
[[elasticsearch.query-methods.criterions]]
|
||||||
== Query creation
|
== Query creation
|
||||||
@@ -314,13 +312,11 @@ Repository methods can be defined to have the following return types for returni
|
|||||||
* `SearchPage<T>`
|
* `SearchPage<T>`
|
||||||
|
|
||||||
[[elasticsearch.query-methods.at-query]]
|
[[elasticsearch.query-methods.at-query]]
|
||||||
== Using the @Query Annotation
|
== Using @Query Annotation
|
||||||
|
|
||||||
.Declare query on the method using the `@Query` annotation.
|
.Declare query on the method using the `@Query` annotation.
|
||||||
====
|
====
|
||||||
The arguments passed to the method can be inserted into placeholders in the query string.
|
The arguments passed to the method can be inserted into placeholders in the query string. The placeholders are of the form `?0`, `?1`, `?2` etc. for the first, second, third parameter and so on.
|
||||||
The placeholders are of the form `?0`, `?1`, `?2` etc. for the first, second, third parameter and so on.
|
|
||||||
|
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
||||||
@@ -345,20 +341,15 @@ It will be sent to Easticsearch as value of the query element; if for example th
|
|||||||
}
|
}
|
||||||
----
|
----
|
||||||
====
|
====
|
||||||
|
|
||||||
.`@Query` annotation on a method taking a Collection argument
|
.`@Query` annotation on a method taking a Collection argument
|
||||||
====
|
====
|
||||||
A repository method such as
|
A repository method such as
|
||||||
|
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
@Query("{\"ids\": {\"values\": ?0 }}")
|
@Query("{\"ids\": {\"values\": ?0 }}")
|
||||||
List<SampleEntity> getByIds(Collection<String> ids);
|
List<SampleEntity> getByIds(Collection<String> ids);
|
||||||
----
|
----
|
||||||
|
would make an https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html[IDs query] to return all the matching documents. So calling the method with a `List` of `["id1", "id2", "id3"]` would produce the query body
|
||||||
would make an https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html[IDs query] to return all the matching documents.
|
|
||||||
So calling the method with a `List` of `["id1", "id2", "id3"]` would produce the query body
|
|
||||||
|
|
||||||
[source,json]
|
[source,json]
|
||||||
----
|
----
|
||||||
{
|
{
|
||||||
@@ -376,7 +367,8 @@ So calling the method with a `List` of `["id1", "id2", "id3"]` would produce the
|
|||||||
|
|
||||||
.Declare query on the method using the `@Query` annotation with SpEL expression.
|
.Declare query on the method using the `@Query` annotation with SpEL expression.
|
||||||
====
|
====
|
||||||
{spring-framework-docs}/core/expressions.html[SpEL expression] is also supported when defining query in `@Query`.
|
https://docs.spring.io/spring-framework/reference/core/expressions.html[SpEL expression] is also supported when defining query in `@Query`.
|
||||||
|
|
||||||
|
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
@@ -419,7 +411,6 @@ If for example the function is called with the parameter _John_, it would produc
|
|||||||
.accessing parameter property.
|
.accessing parameter property.
|
||||||
====
|
====
|
||||||
Supposing that we have the following class as query parameter type:
|
Supposing that we have the following class as query parameter type:
|
||||||
|
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
public record QueryParameter(String value) {
|
public record QueryParameter(String value) {
|
||||||
@@ -453,9 +444,7 @@ We can pass `new QueryParameter("John")` as the parameter now, and it will produ
|
|||||||
|
|
||||||
.accessing bean property.
|
.accessing bean property.
|
||||||
====
|
====
|
||||||
{spring-framework-docs}/core/expressions/language-ref/bean-references.html[Bean property] is also supported to access.
|
https://docs.spring.io/spring-framework/reference/core/expressions/language-ref/bean-references.html[Bean property] is also supported to access. Given that there is a bean named `queryParameter` of type `QueryParameter`, we can access the bean with symbol `@` rather than `#`, and there is no need to declare a parameter of type `QueryParameter` in the query method:
|
||||||
Given that there is a bean named `queryParameter` of type `QueryParameter`, we can access the bean with symbol `@` rather than `#`, and there is no need to declare a parameter of type `QueryParameter` in the query method:
|
|
||||||
|
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
||||||
@@ -504,7 +493,6 @@ interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|||||||
NOTE: collection values should not be quoted when declaring the elasticsearch json query.
|
NOTE: collection values should not be quoted when declaring the elasticsearch json query.
|
||||||
|
|
||||||
A collection of `names` like `List.of("name1", "name2")` will produce the following terms query:
|
A collection of `names` like `List.of("name1", "name2")` will produce the following terms query:
|
||||||
|
|
||||||
[source,json]
|
[source,json]
|
||||||
----
|
----
|
||||||
{
|
{
|
||||||
@@ -523,7 +511,7 @@ A collection of `names` like `List.of("name1", "name2")` will produce the follow
|
|||||||
|
|
||||||
.access property in the `Collection` param.
|
.access property in the `Collection` param.
|
||||||
====
|
====
|
||||||
{spring-framework-docs}/core/expressions/language-ref/collection-projection.html[SpEL Collection Projection] is convenient to use when values in the `Collection` parameter is not plain `String`:
|
https://docs.spring.io/spring-framework/reference/core/expressions/language-ref/collection-projection.html[SpEL Collection Projection] is convenient to use when values in the `Collection` parameter is not plain `String`:
|
||||||
|
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
@@ -544,7 +532,6 @@ interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|||||||
Page<Book> findByName(Collection<QueryParameter> parameters, Pageable pageable);
|
Page<Book> findByName(Collection<QueryParameter> parameters, Pageable pageable);
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
This will extract all the `value` property values as a new `Collection` from `QueryParameter` collection, thus takes the same effect as above.
|
This will extract all the `value` property values as a new `Collection` from `QueryParameter` collection, thus takes the same effect as above.
|
||||||
====
|
====
|
||||||
|
|
||||||
@@ -573,20 +560,3 @@ interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|||||||
----
|
----
|
||||||
|
|
||||||
====
|
====
|
||||||
|
|
||||||
[[elasticsearch.query-methods.at-searchtemplate-query]]
|
|
||||||
== Using the @SearchTemplateQuery Annotation
|
|
||||||
|
|
||||||
When using Elasticsearch search templates - (see xref:elasticsearch/misc.adoc#elasticsearch.misc.searchtemplates [Search Template support]) it is possible to specify that a repository method should use a template by adding the `@SearchTemplateQuery` annotation to that method.
|
|
||||||
|
|
||||||
Let's assume that there is a search template stored with the name "book-by-title" and this template need a parameter named "title", then a repository method using that search template can be defined like this:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|
||||||
@SearchTemplateQuery(id = "book-by-title")
|
|
||||||
SearchHits<Book> findByTitle(String title);
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
The parameters of the repository method are sent to the seacrh template as key/value pairs where the key is the parameter name and the value is taken from the actual value when the method is invoked.
|
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ Whereas the birthdate is fix, the age depends on the time when a query is issued
|
|||||||
====
|
====
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
import org.springframework.data.annotation.Id;
|
import org.springframework.data.annotation.Id;
|
||||||
import org.springframework.data.elasticsearch.annotations.DateFormat;
|
import org.springframework.data.elasticsearch.annotations.DateFormat;
|
||||||
import org.springframework.data.elasticsearch.annotations.Document;
|
import org.springframework.data.elasticsearch.annotations.Document;
|
||||||
import org.springframework.data.elasticsearch.annotations.Field;
|
import org.springframework.data.elasticsearch.annotations.Field;
|
||||||
import org.springframework.data.elasticsearch.annotations.ScriptedField;
|
import org.springframework.data.elasticsearch.annotations.ScriptedField;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ When a document is retrieved with the methods of the `DocumentOperations` inter
|
|||||||
When searching with the methods of the `SearchOperations` interface, additional information is available for each entity, for example the _score_ or the _sortValues_ of the found entity.
|
When searching with the methods of the `SearchOperations` interface, additional information is available for each entity, for example the _score_ or the _sortValues_ of the found entity.
|
||||||
|
|
||||||
In order to return this information, each entity is wrapped in a `SearchHit` object that contains this entity-specific additional information.
|
In order to return this information, each entity is wrapped in a `SearchHit` object that contains this entity-specific additional information.
|
||||||
These `SearchHit` objects themselves are returned within a `SearchHits` object which additionally contains informations about the whole search like the _maxScore_ or requested aggregations or the execution duration it took to complete the request.
|
These `SearchHit` objects themselves are returned within a `SearchHits` object which additionally contains informations about the whole search like the _maxScore_ or requested aggregations.
|
||||||
The following classes and interfaces are now available:
|
The following classes and interfaces are now available:
|
||||||
|
|
||||||
.SearchHit<T>
|
.SearchHit<T>
|
||||||
|
|||||||
@@ -6,13 +6,9 @@ The following table shows the Elasticsearch and Spring versions that are used by
|
|||||||
[cols="^,^,^,^",options="header"]
|
[cols="^,^,^,^",options="header"]
|
||||||
|===
|
|===
|
||||||
| Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework
|
| Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework
|
||||||
| 2026.0 | 6.1.x | 9.4.2 | 7.0.x
|
| 2024.0 | 5.3.3 | 8.13.4 | 6.1.x
|
||||||
| 2025.1 | 6.0.x | 9.2.2 | 7.0.x
|
| 2023.1 (Vaughan) | 5.2.x | 8.11.1 | 6.1.x
|
||||||
| 2025.0 | 5.5.xfootnote:oom[Out of maintenance] | 8.18.1 | 6.2.x
|
| 2023.0 (Ullmann) | 5.1.xfootnote:oom[Out of maintenance] | 8.7.1 | 6.0.x
|
||||||
| 2024.1 | 5.4.xfootnote:oom[] | 8.15.5 | 6.1.x
|
|
||||||
| 2024.0 | 5.3.xfootnote:oom[] | 8.13.4 | 6.1.x
|
|
||||||
| 2023.1 (Vaughan) | 5.2.xfootnote:oom[] | 8.11.1 | 6.1.x
|
|
||||||
| 2023.0 (Ullmann) | 5.1.xfootnote:oom[] | 8.7.1 | 6.0.x
|
|
||||||
| 2022.0 (Turing) | 5.0.xfootnote:oom[] | 8.5.3 | 6.0.x
|
| 2022.0 (Turing) | 5.0.xfootnote:oom[] | 8.5.3 | 6.0.x
|
||||||
| 2021.2 (Raj) | 4.4.xfootnote:oom[] | 7.17.3 | 5.3.x
|
| 2021.2 (Raj) | 4.4.xfootnote:oom[] | 7.17.3 | 5.3.x
|
||||||
| 2021.1 (Q) | 4.3.xfootnote:oom[] | 7.15.2 | 5.3.x
|
| 2021.1 (Q) | 4.3.xfootnote:oom[] | 7.15.2 | 5.3.x
|
||||||
|
|||||||
@@ -5,17 +5,14 @@ This section describes breaking changes from version 5.2.x to 5.3.x and how remo
|
|||||||
|
|
||||||
[[elasticsearch-migration-guide-5.2-5.3.breaking-changes]]
|
[[elasticsearch-migration-guide-5.2-5.3.breaking-changes]]
|
||||||
== Breaking Changes
|
== Breaking Changes
|
||||||
|
During the parameter replacement in `@Query` annotated repository methods previous versions wrote the String _"null"_ into the query that was sent to Elasticsearch
|
||||||
During the parameter replacement in `@Query` annotated repository methods previous versions wrote the String `"null"` into the query that was sent to Elasticsearch when the actual parameter value was `null`.
|
when the actual parameter value was `null`. As Elasticsearch does not store `null` values, this behaviour could lead to problems, for example whent the fields to be
|
||||||
As Elasticsearch does not store `null` values, this behaviour could lead to problems, for example whent the fields to be searched contains the string `"null"`.
|
searched contains the string `"null"`. In Version 5.3 a `null` value in a parameter will cause a `ConversionException` to be thrown. If you are using `"null"` as the
|
||||||
In Version 5.3 a `null` value in a parameter will cause a `ConversionException` to be thrown.
|
|
||||||
If you are using `"null"` as the
|
|
||||||
`null_value` defined in a field mapping, then pass that string into the query instead of a Java `null`.
|
`null_value` defined in a field mapping, then pass that string into the query instead of a Java `null`.
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.2-5.3.deprecations]]
|
[[elasticsearch-migration-guide-5.2-5.3.deprecations]]
|
||||||
== Deprecations
|
== Deprecations
|
||||||
|
|
||||||
=== Removals
|
=== Removals
|
||||||
|
|
||||||
The deprecated classes `org.springframework.data.elasticsearch.ELCQueries`
|
The deprecated classes `org.springframework.data.elasticsearch.ELCQueries`
|
||||||
and `org.springframework.data.elasticsearch.client.elc.QueryBuilders` have been removed, use `org.springframework.data.elasticsearch.client.elc.Queries` instead.
|
and `org.springframework.data.elasticsearch.client.elc.QueryBuilders` have been removed, use `org.springframework.data.elasticsearch.client.elc.Queries` instead.
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
[[elasticsearch-migration-guide-5.3-5.4]]
|
|
||||||
= Upgrading from 5.3.x to 5.4.x
|
|
||||||
|
|
||||||
This section describes breaking changes from version 5.3.x to 5.4.x and how removed features can be replaced by new introduced features.
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.3-5.4.breaking-changes]]
|
|
||||||
== Breaking Changes
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.3-5.4.breaking-changes.knn-search]]
|
|
||||||
=== knn search
|
|
||||||
The `withKnnQuery` method in `NativeQueryBuilder` has been replaced with `withKnnSearches` to build a `NativeQuery` with knn search.
|
|
||||||
|
|
||||||
`KnnQuery` and `KnnSearch` are two different classes in elasticsearch java client and are used for different queries, with different parameters supported:
|
|
||||||
|
|
||||||
- `KnnSearch`: is https://www.elastic.co/guide/en/elasticsearch/reference/8.13/search-search.html#search-api-knn[the top level `knn` query] in the elasticsearch request;
|
|
||||||
- `KnnQuery`: is https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-knn-query.html[the `knn` query inside `query` clause];
|
|
||||||
|
|
||||||
If `KnnQuery` is still preferable, please be sure to construct it inside `query` clause manually, by means of `withQuery(co.elastic.clients.elasticsearch._types.query_dsl.Query query)` clause in `NativeQueryBuilder`.
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.3-5.4.deprecations]]
|
|
||||||
== Deprecations
|
|
||||||
|
|
||||||
=== Removals
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
[[elasticsearch-migration-guide-5.4-5.5]]
|
|
||||||
= Upgrading from 5.4.x to 5.5.x
|
|
||||||
|
|
||||||
This section describes breaking changes from version 5.4.x to 5.5.x and how removed features can be replaced by new introduced features.
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.4-5.5.breaking-changes]]
|
|
||||||
== Breaking Changes
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.4-5.5.deprecations]]
|
|
||||||
== Deprecations
|
|
||||||
|
|
||||||
Some classes that probably are not used by a library user have been renamed, the classes with the old names are still there, but are deprecated:
|
|
||||||
|
|
||||||
|===
|
|
||||||
|old name|new name
|
|
||||||
|
|
||||||
|ElasticsearchPartQuery|RepositoryPartQuery
|
|
||||||
|ElasticsearchStringQuery|RepositoryStringQuery
|
|
||||||
|ReactiveElasticsearchStringQuery|ReactiveRepositoryStringQuery
|
|
||||||
|===
|
|
||||||
|
|
||||||
=== Removals
|
|
||||||
|
|
||||||
The following methods that had been deprecated since release 5.3 have been removed:
|
|
||||||
```
|
|
||||||
DocumentOperations.delete(Query, Class<?>)
|
|
||||||
DocumentOperations.delete(Query, Class<?>, IndexCoordinates)
|
|
||||||
ReactiveDocumentOperations.delete(Query, Class<?>)
|
|
||||||
ReactiveDocumentOperations.delete(Query, Class<?>, IndexCoordinates)
|
|
||||||
```
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
[[elasticsearch-migration-guide-5.5-6.0]]
|
|
||||||
= Upgrading from 5.5.x to 6.0.x
|
|
||||||
|
|
||||||
This section describes breaking changes from version 5.5.x to 6.0.x and how removed features can be replaced by new introduced features.
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.5-6.0.breaking-changes]]
|
|
||||||
== Breaking Changes
|
|
||||||
|
|
||||||
From version 6.0 on, Spring Data Elasticsearch uses the Elasticsearch 9 libraries and as default the new `Rest5Client` provided by these libraries. It is still possible to use the old `RestClient`, check xref:elasticsearch/clients.adoc[Elasticsearch clients] for information. The configuration callbacks for this `RestClient` have been moved from `org.springframework.data.elasticsearch.client.elc.ElasticsearchClients` to the `org.springframework.data.elasticsearch.client.elc.rest_client.RestClients` class.
|
|
||||||
|
|
||||||
In the `org.springframework.data.elasticsearch.core.query.UpdateQuery` class the type of the two fields `ifSeqNo` and `ifPrimaryTerm` has changed from `Integer` to `Long` to align with the normal query and the underlying Elasticsearch client.
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.5-6.0.deprecations]]
|
|
||||||
== Deprecations
|
|
||||||
|
|
||||||
All the code using the old `RestClient` has been moved to the `org.springframework.data.elasticsearch.client.elc.rest_client` package and has been deprecated. Users should switch to the classes from the `org.springframework.data.elasticsearch.client.elc.rest5_client` package.
|
|
||||||
|
|
||||||
|
|
||||||
=== Removals
|
|
||||||
|
|
||||||
The `org.springframework.data.elasticsearch.core.query.ScriptType` enum has been removed. To distinguish between an inline and a stored script set the appropriate values in the `org.springframework.data.elasticsearch.core.query.ScriptData` record.
|
|
||||||
|
|
||||||
These methods have been removed because the Elasticsearch Client 9 does not support them anymore:
|
|
||||||
```
|
|
||||||
org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchIndicesClient.unfreeze(UnfreezeRequest)
|
|
||||||
org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchIndicesClient.unfreeze(Function<UnfreezeRequest.Builder, ObjectBuilder<UnfreezeRequest>>)
|
|
||||||
```
|
|
||||||
@@ -1,13 +1,4 @@
|
|||||||
[[elasticsearch.projections]]
|
[[elasticsearch.projections]]
|
||||||
= Projections
|
= Projections
|
||||||
|
|
||||||
[[elasticsearch.projections.limitations]]
|
|
||||||
== Spring Data Elasticsearch Projection Limitations
|
|
||||||
|
|
||||||
This chapter is pulled in from the Spring Data Commons documentation, but does not apply to Spring Data Elasticsearch.
|
|
||||||
|
|
||||||
IMPORTANT: Interface-based projections are not supported in Spring Data Elasticsearch repository query methods.
|
|
||||||
|
|
||||||
To limit the fields returned from Elasticsearch, use the xref:elasticsearch/repositories/elasticsearch-repositories.adoc#elasticsearch.repositories.annotations.sourcefilters[`@SourceFilters`] annotation on your repository methods instead.
|
|
||||||
|
|
||||||
include::{commons}@data-commons::page$repositories/projections.adoc[leveloffset=+1]
|
include::{commons}@data-commons::page$repositories/projections.adoc[leveloffset=+1]
|
||||||
|
|||||||
@@ -3,20 +3,19 @@ prerelease: ${antora-component.prerelease}
|
|||||||
|
|
||||||
asciidoc:
|
asciidoc:
|
||||||
attributes:
|
attributes:
|
||||||
|
copyright-year: ${current.year}
|
||||||
|
version: ${project.version}
|
||||||
|
springversionshort: ${spring.short}
|
||||||
|
springversion: ${spring}
|
||||||
attribute-missing: 'warn'
|
attribute-missing: 'warn'
|
||||||
chomp: 'all'
|
commons: ${springdata.commons.docs}
|
||||||
version: '${project.version}'
|
|
||||||
copyright-year: '${current.year}'
|
|
||||||
springversionshort: '${spring.short}'
|
|
||||||
springversion: '${spring}'
|
|
||||||
commons: '${springdata.commons.docs}'
|
|
||||||
include-xml-namespaces: false
|
include-xml-namespaces: false
|
||||||
spring-data-commons-docs-url: '${documentation.baseurl}/spring-data/commons/reference/${springdata.commons.short}'
|
spring-data-commons-docs-url: https://docs.spring.io/spring-data/commons/reference
|
||||||
spring-data-commons-javadoc-base: '{spring-data-commons-docs-url}/api/java'
|
spring-data-commons-javadoc-base: https://docs.spring.io/spring-data/commons/docs/${springdata.commons}/api/
|
||||||
springdocsurl: '${documentation.baseurl}/spring-framework/reference/{springversionshort}'
|
springdocsurl: https://docs.spring.io/spring-framework/reference/{springversionshort}
|
||||||
|
springjavadocurl: https://docs.spring.io/spring-framework/docs/${spring}/javadoc-api
|
||||||
spring-framework-docs: '{springdocsurl}'
|
spring-framework-docs: '{springdocsurl}'
|
||||||
springjavadocurl: '${documentation.spring-javadoc-url}'
|
|
||||||
spring-framework-javadoc: '{springjavadocurl}'
|
spring-framework-javadoc: '{springjavadocurl}'
|
||||||
springhateoasversion: '${spring-hateoas}'
|
springhateoasversion: ${spring-hateoas}
|
||||||
releasetrainversion: '${releasetrain}'
|
releasetrainversion: ${releasetrain}
|
||||||
store: Elasticsearch
|
store: Elasticsearch
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -15,11 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.elasticsearch;
|
package org.springframework.data.elasticsearch;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
import org.springframework.dao.DataRetrievalFailureException;
|
import org.springframework.dao.DataRetrievalFailureException;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Peter-Josef Meisch
|
* @author Peter-Josef Meisch
|
||||||
* @author Illia Ulianov
|
* @author Illia Ulianov
|
||||||
@@ -43,6 +42,6 @@ public class BulkFailureException extends DataRetrievalFailureException {
|
|||||||
* @author Illia Ulianov
|
* @author Illia Ulianov
|
||||||
* @since 5.2
|
* @since 5.2
|
||||||
*/
|
*/
|
||||||
public record FailureDetails(Integer status, @Nullable String errorMessage) {
|
public record FailureDetails(Integer status, String errorMessage) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.elasticsearch;
|
package org.springframework.data.elasticsearch;
|
||||||
|
|
||||||
import java.util.List;
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object describing an Elasticsearch error
|
* Object describing an Elasticsearch error
|
||||||
@@ -26,9 +26,10 @@ import org.jspecify.annotations.Nullable;
|
|||||||
* @since 4.4
|
* @since 4.4
|
||||||
*/
|
*/
|
||||||
public class ElasticsearchErrorCause {
|
public class ElasticsearchErrorCause {
|
||||||
@Nullable private final String type;
|
@Nullable
|
||||||
|
private final String type;
|
||||||
|
|
||||||
@Nullable private final String reason;
|
private final String reason;
|
||||||
|
|
||||||
@Nullable private final String stackTrace;
|
@Nullable private final String stackTrace;
|
||||||
|
|
||||||
@@ -38,7 +39,7 @@ public class ElasticsearchErrorCause {
|
|||||||
|
|
||||||
private final List<ElasticsearchErrorCause> suppressed;
|
private final List<ElasticsearchErrorCause> suppressed;
|
||||||
|
|
||||||
public ElasticsearchErrorCause(@Nullable String type, @Nullable String reason, @Nullable String stackTrace,
|
public ElasticsearchErrorCause(@Nullable String type, String reason, @Nullable String stackTrace,
|
||||||
@Nullable ElasticsearchErrorCause causedBy, List<ElasticsearchErrorCause> rootCause,
|
@Nullable ElasticsearchErrorCause causedBy, List<ElasticsearchErrorCause> rootCause,
|
||||||
List<ElasticsearchErrorCause> suppressed) {
|
List<ElasticsearchErrorCause> suppressed) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
@@ -54,7 +55,7 @@ public class ElasticsearchErrorCause {
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable String getReason() {
|
public String getReason() {
|
||||||
return reason;
|
return reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -15,8 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.elasticsearch;
|
package org.springframework.data.elasticsearch;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
import org.springframework.dao.UncategorizedDataAccessException;
|
import org.springframework.dao.UncategorizedDataAccessException;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Peter-Josef Meisch
|
* @author Peter-Josef Meisch
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2023-present the original author or authors.
|
* Copyright 2023-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Inherited;
|
|
||||||
import java.lang.annotation.Repeatable;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
import org.springframework.core.annotation.AliasFor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identifies an alias for the index.
|
|
||||||
*
|
|
||||||
* @author Youssef Aouichaoui
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
@Inherited
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target({ ElementType.TYPE })
|
|
||||||
@Repeatable(Aliases.class)
|
|
||||||
public @interface Alias {
|
|
||||||
/**
|
|
||||||
* @return Index alias name. Alias for {@link #alias}.
|
|
||||||
*/
|
|
||||||
@AliasFor("alias")
|
|
||||||
String value() default "";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Index alias name. Alias for {@link #value}.
|
|
||||||
*/
|
|
||||||
@AliasFor("value")
|
|
||||||
String alias() default "";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Query used to limit documents the alias can access.
|
|
||||||
*/
|
|
||||||
Filter filter() default @Filter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Used to route indexing operations to a specific shard.
|
|
||||||
*/
|
|
||||||
String indexRouting() default "";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Used to route indexing and search operations to a specific shard.
|
|
||||||
*/
|
|
||||||
String routing() default "";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Used to route search operations to a specific shard.
|
|
||||||
*/
|
|
||||||
String searchRouting() default "";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Is the alias hidden?
|
|
||||||
*/
|
|
||||||
boolean isHidden() default false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Is it the 'write index' for the alias?
|
|
||||||
*/
|
|
||||||
boolean isWriteIndex() default false;
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Inherited;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Container annotation that aggregates several {@link Alias} annotations.
|
|
||||||
*
|
|
||||||
* @author Youssef Aouichaoui
|
|
||||||
* @see Alias
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
@Inherited
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target({ ElementType.TYPE })
|
|
||||||
public @interface Aliases {
|
|
||||||
Alias[] value();
|
|
||||||
}
|
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-present the original author or authors.
|
* Copyright 2013-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-present the original author or authors.
|
* Copyright 2014-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-present the original author or authors.
|
* Copyright 2013-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -101,21 +101,16 @@ public @interface Document {
|
|||||||
boolean storeVersionInSource() default true;
|
boolean storeVersionInSource() default true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Aliases for the index.
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
Alias[] aliases() default {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Note: the enum value FORCE, which was introduced in 4.4 has been removed
|
|
||||||
* again by Elasticsearch.
|
|
||||||
* @since 4.3
|
* @since 4.3
|
||||||
*/
|
*/
|
||||||
enum VersionType {
|
enum VersionType {
|
||||||
INTERNAL("internal"), //
|
INTERNAL("internal"), //
|
||||||
EXTERNAL("external"), //
|
EXTERNAL("external"), //
|
||||||
EXTERNAL_GTE("external_gte"); //
|
EXTERNAL_GTE("external_gte"), //
|
||||||
|
/**
|
||||||
|
* @since 4.4
|
||||||
|
*/
|
||||||
|
FORCE("force");
|
||||||
|
|
||||||
private final String esName;
|
private final String esName;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-present the original author or authors.
|
* Copyright 2013-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -37,8 +37,6 @@ import org.springframework.core.annotation.AliasFor;
|
|||||||
* @author Brian Kimmig
|
* @author Brian Kimmig
|
||||||
* @author Morgan Lutz
|
* @author Morgan Lutz
|
||||||
* @author Sascha Woo
|
* @author Sascha Woo
|
||||||
* @author Haibo Liu
|
|
||||||
* @author Andriy Redko
|
|
||||||
*/
|
*/
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.METHOD })
|
@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.METHOD })
|
||||||
@@ -130,10 +128,6 @@ public @interface Field {
|
|||||||
boolean norms() default true;
|
boolean norms() default true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NOte that null_value setting are not supported in Elasticsearch for all types. For example setting a null_value on
|
|
||||||
* a field with type text will throw an exception in the server when the mapping is written to Elasticsearch. Alas,
|
|
||||||
* the Elasticsearch documentation does not specify on which types it is allowed on which it is not.
|
|
||||||
*
|
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
String nullValue() default "";
|
String nullValue() default "";
|
||||||
@@ -201,27 +195,6 @@ public @interface Field {
|
|||||||
*/
|
*/
|
||||||
int dims() default -1;
|
int dims() default -1;
|
||||||
|
|
||||||
/**
|
|
||||||
* to be used in combination with {@link FieldType#Dense_Vector}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
String elementType() default FieldElementType.DEFAULT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* to be used in combination with {@link FieldType#Dense_Vector}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
KnnSimilarity knnSimilarity() default KnnSimilarity.DEFAULT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* to be used in combination with {@link FieldType#Dense_Vector}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
KnnIndexOptions[] knnIndexOptions() default {};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls how Elasticsearch dynamically adds fields to the inner object within the document.<br>
|
* Controls how Elasticsearch dynamically adds fields to the inner object within the document.<br>
|
||||||
* To be used in combination with {@link FieldType#Object} or {@link FieldType#Nested}
|
* To be used in combination with {@link FieldType#Object} or {@link FieldType#Nested}
|
||||||
@@ -245,11 +218,4 @@ public @interface Field {
|
|||||||
* @since 5.1
|
* @since 5.1
|
||||||
*/
|
*/
|
||||||
boolean storeEmptyValue() default true;
|
boolean storeEmptyValue() default true;
|
||||||
|
|
||||||
/**
|
|
||||||
* overrides the field type in the mapping which otherwise will be taken from corresponding {@link FieldType}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
String mappedTypeName() default "";
|
|
||||||
}
|
}
|
||||||
|
|||||||
-26
@@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Haibo Liu
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
public final class FieldElementType {
|
|
||||||
public final static String DEFAULT = "";
|
|
||||||
public final static String FLOAT = "float";
|
|
||||||
public final static String BYTE = "byte";
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-present the original author or authors.
|
* Copyright 2013-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
import org.springframework.core.annotation.AliasFor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Query used to limit documents.
|
|
||||||
*
|
|
||||||
* @author Youssef Aouichaoui
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
public @interface Filter {
|
|
||||||
/**
|
|
||||||
* @return Query used to limit documents. Alias for {@link #query}.
|
|
||||||
*/
|
|
||||||
@AliasFor("query")
|
|
||||||
String value() default "";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Query used to limit documents. Alias for {@link #value}.
|
|
||||||
*/
|
|
||||||
@AliasFor("value")
|
|
||||||
String query() default "";
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-present the original author or authors.
|
* Copyright 2013-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2017-present the original author or authors.
|
* Copyright 2017-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2023-present the original author or authors.
|
* Copyright 2023-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-present the original author or authors.
|
* Copyright 2014-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -29,8 +29,6 @@ import java.lang.annotation.Target;
|
|||||||
* @author Aleksei Arsenev
|
* @author Aleksei Arsenev
|
||||||
* @author Brian Kimmig
|
* @author Brian Kimmig
|
||||||
* @author Morgan Lutz
|
* @author Morgan Lutz
|
||||||
* @author Haibo Liu
|
|
||||||
* @author Andriy Redko
|
|
||||||
*/
|
*/
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target(ElementType.ANNOTATION_TYPE)
|
@Target(ElementType.ANNOTATION_TYPE)
|
||||||
@@ -151,32 +149,4 @@ public @interface InnerField {
|
|||||||
* @since 4.2
|
* @since 4.2
|
||||||
*/
|
*/
|
||||||
int dims() default -1;
|
int dims() default -1;
|
||||||
|
|
||||||
/**
|
|
||||||
* to be used in combination with {@link FieldType#Dense_Vector}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
String elementType() default FieldElementType.DEFAULT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* to be used in combination with {@link FieldType#Dense_Vector}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
KnnSimilarity knnSimilarity() default KnnSimilarity.DEFAULT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* to be used in combination with {@link FieldType#Dense_Vector}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
KnnIndexOptions[] knnIndexOptions() default {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* overrides the field type in the mapping which otherwise will be taken from corresponding {@link FieldType}
|
|
||||||
*
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
String mappedTypeName() default "";
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
-38
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Haibo Liu
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
public enum KnnAlgorithmType {
|
|
||||||
HNSW("hnsw"),
|
|
||||||
INT8_HNSW("int8_hnsw"),
|
|
||||||
FLAT("flat"),
|
|
||||||
INT8_FLAT("int8_flat"),
|
|
||||||
DEFAULT("");
|
|
||||||
|
|
||||||
private final String type;
|
|
||||||
|
|
||||||
KnnAlgorithmType(String type) {
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Haibo Liu
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
public @interface KnnIndexOptions {
|
|
||||||
|
|
||||||
KnnAlgorithmType type() default KnnAlgorithmType.DEFAULT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Only applicable to {@link KnnAlgorithmType#HNSW} and {@link KnnAlgorithmType#INT8_HNSW} index types.
|
|
||||||
*/
|
|
||||||
int m() default -1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Only applicable to {@link KnnAlgorithmType#HNSW} and {@link KnnAlgorithmType#INT8_HNSW} index types.
|
|
||||||
*/
|
|
||||||
int efConstruction() default -1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Only applicable to {@link KnnAlgorithmType#INT8_HNSW} and {@link KnnAlgorithmType#INT8_FLAT} index types.
|
|
||||||
*/
|
|
||||||
float confidenceInterval() default -1F;
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2024-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Haibo Liu
|
|
||||||
* @since 5.4
|
|
||||||
*/
|
|
||||||
public enum KnnSimilarity {
|
|
||||||
L2_NORM("l2_norm"),
|
|
||||||
DOT_PRODUCT("dot_product"),
|
|
||||||
COSINE("cosine"),
|
|
||||||
MAX_INNER_PRODUCT("max_inner_product"),
|
|
||||||
DEFAULT("");
|
|
||||||
|
|
||||||
private final String similarity;
|
|
||||||
|
|
||||||
KnnSimilarity(String similarity) {
|
|
||||||
this.similarity = similarity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSimilarity() {
|
|
||||||
return similarity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-present the original author or authors.
|
* Copyright 2014-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2024-present the original author or authors.
|
* Copyright 2024-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-present the original author or authors.
|
* Copyright 2014-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-present the original author or authors.
|
* Copyright 2013-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
-42
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2025-present the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
|
||||||
|
|
||||||
import org.springframework.data.annotation.QueryAnnotation;
|
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Annotation to mark a repository method as a search template method. The annotation defines the search template id,
|
|
||||||
* the parameters for the search template are taken from the method's arguments.
|
|
||||||
*
|
|
||||||
* @author P.J. Meisch (pj.meisch@sothawo.com)
|
|
||||||
* @since 5.5
|
|
||||||
*/
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
|
|
||||||
@Documented
|
|
||||||
@QueryAnnotation
|
|
||||||
public @interface SearchTemplateQuery {
|
|
||||||
/**
|
|
||||||
* The id of the search template. Must not be empt or null.
|
|
||||||
*/
|
|
||||||
String id();
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-present the original author or authors.
|
* Copyright 2014-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,18 +1,3 @@
|
|||||||
/*
|
@org.springframework.lang.NonNullApi
|
||||||
* Copyright 2022-present the original author or authors.
|
@org.springframework.lang.NonNullFields
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@org.jspecify.annotations.NullMarked
|
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
package org.springframework.data.elasticsearch.annotations;
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2023-present the original author or authors.
|
* Copyright 2023-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -17,7 +17,7 @@ package org.springframework.data.elasticsearch.aot;
|
|||||||
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import org.springframework.data.core.ReactiveWrappers;
|
import org.springframework.data.util.ReactiveWrappers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Peter-Josef Meisch
|
* @author Peter-Josef Meisch
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2023-present the original author or authors.
|
* Copyright 2023-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -19,7 +19,6 @@ import static org.springframework.data.elasticsearch.aot.ElasticsearchAotPredica
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
import org.springframework.aot.hint.MemberCategory;
|
import org.springframework.aot.hint.MemberCategory;
|
||||||
import org.springframework.aot.hint.RuntimeHints;
|
import org.springframework.aot.hint.RuntimeHints;
|
||||||
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
||||||
@@ -33,6 +32,7 @@ import org.springframework.data.elasticsearch.core.event.ReactiveAfterConvertCal
|
|||||||
import org.springframework.data.elasticsearch.core.event.ReactiveAfterLoadCallback;
|
import org.springframework.data.elasticsearch.core.event.ReactiveAfterLoadCallback;
|
||||||
import org.springframework.data.elasticsearch.core.event.ReactiveAfterSaveCallback;
|
import org.springframework.data.elasticsearch.core.event.ReactiveAfterSaveCallback;
|
||||||
import org.springframework.data.elasticsearch.core.event.ReactiveBeforeConvertCallback;
|
import org.springframework.data.elasticsearch.core.event.ReactiveBeforeConvertCallback;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Peter-Josef Meisch
|
* @author Peter-Josef Meisch
|
||||||
|
|||||||
@@ -1,18 +1,3 @@
|
|||||||
/*
|
@org.springframework.lang.NonNullApi
|
||||||
* Copyright 2022-present the original author or authors.
|
@org.springframework.lang.NonNullFields
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@org.jspecify.annotations.NullMarked
|
|
||||||
package org.springframework.data.elasticsearch.aot;
|
package org.springframework.data.elasticsearch.aot;
|
||||||
|
|||||||
+3
-9
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -25,8 +25,8 @@ import java.util.function.Supplier;
|
|||||||
import javax.net.ssl.HostnameVerifier;
|
import javax.net.ssl.HostnameVerifier;
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
import org.springframework.data.elasticsearch.support.HttpHeaders;
|
import org.springframework.data.elasticsearch.support.HttpHeaders;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration interface exposing common client configuration properties for Elasticsearch clients.
|
* Configuration interface exposing common client configuration properties for Elasticsearch clients.
|
||||||
@@ -127,16 +127,10 @@ public interface ClientConfiguration {
|
|||||||
Optional<String> getCaFingerprint();
|
Optional<String> getCaFingerprint();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the {@link HostnameVerifier} to use. Must be {@link Optional#empty()} if not configured.
|
* Returns the {@link HostnameVerifier} to use. Can be {@link Optional#empty()} if not configured.
|
||||||
* Cannot be used with the Rest5Client used from Elasticsearch 9 on as the underlying Apache http components 5 does not offer a way
|
|
||||||
* to set this. Users that need a hostname verifier must integrate this in a SSLContext.
|
|
||||||
* Returning a value here is ignored in this case
|
|
||||||
*
|
*
|
||||||
* @return the {@link HostnameVerifier} to use. Can be {@link Optional#empty()} if not configured.
|
* @return the {@link HostnameVerifier} to use. Can be {@link Optional#empty()} if not configured.
|
||||||
* @deprecated since 6.0
|
|
||||||
*/
|
*/
|
||||||
// todo #3117 document this
|
|
||||||
@Deprecated(since = "6.0", forRemoval=true)
|
|
||||||
Optional<HostnameVerifier> getHostNameVerifier();
|
Optional<HostnameVerifier> getHostNameVerifier();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -25,11 +25,11 @@ import java.util.function.Supplier;
|
|||||||
import javax.net.ssl.HostnameVerifier;
|
import javax.net.ssl.HostnameVerifier;
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
import org.springframework.data.elasticsearch.client.ClientConfiguration.ClientConfigurationBuilderWithRequiredEndpoint;
|
import org.springframework.data.elasticsearch.client.ClientConfiguration.ClientConfigurationBuilderWithRequiredEndpoint;
|
||||||
import org.springframework.data.elasticsearch.client.ClientConfiguration.MaybeSecureClientConfigurationBuilder;
|
import org.springframework.data.elasticsearch.client.ClientConfiguration.MaybeSecureClientConfigurationBuilder;
|
||||||
import org.springframework.data.elasticsearch.client.ClientConfiguration.TerminalClientConfigurationBuilder;
|
import org.springframework.data.elasticsearch.client.ClientConfiguration.TerminalClientConfigurationBuilder;
|
||||||
import org.springframework.data.elasticsearch.support.HttpHeaders;
|
import org.springframework.data.elasticsearch.support.HttpHeaders;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+3
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -24,8 +24,9 @@ import java.util.function.Supplier;
|
|||||||
import javax.net.ssl.HostnameVerifier;
|
import javax.net.ssl.HostnameVerifier;
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback;
|
||||||
import org.springframework.data.elasticsearch.support.HttpHeaders;
|
import org.springframework.data.elasticsearch.support.HttpHeaders;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default {@link ClientConfiguration} implementation.
|
* Default {@link ClientConfiguration} implementation.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+4
-4
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2024-present the original author or authors.
|
* Copyright 2024-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -17,10 +17,10 @@ package org.springframework.data.elasticsearch.client.elc;
|
|||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
|
||||||
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
|
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
|
||||||
import org.springframework.data.elasticsearch.core.query.Query;
|
import org.springframework.data.elasticsearch.core.query.Query;
|
||||||
import org.springframework.data.elasticsearch.core.query.StringQuery;
|
import org.springframework.data.elasticsearch.core.query.StringQuery;
|
||||||
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An abstract class that serves as a base for query processors. It provides a common interface and basic functionality
|
* An abstract class that serves as a base for query processors. It provides a common interface and basic functionality
|
||||||
@@ -38,8 +38,8 @@ public abstract class AbstractQueryProcessor {
|
|||||||
* @param queryConverter correct mapped field names and the values to the converted values.
|
* @param queryConverter correct mapped field names and the values to the converted values.
|
||||||
* @return an Elasticsearch {@literal query}.
|
* @return an Elasticsearch {@literal query}.
|
||||||
*/
|
*/
|
||||||
|
@Nullable
|
||||||
static co.elastic.clients.elasticsearch._types.query_dsl.@Nullable Query getEsQuery(@Nullable Query query,
|
static co.elastic.clients.elasticsearch._types.query_dsl.Query getEsQuery(@Nullable Query query,
|
||||||
@Nullable Consumer<Query> queryConverter) {
|
@Nullable Consumer<Query> queryConverter) {
|
||||||
if (query == null) {
|
if (query == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+3
-8
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -18,8 +18,6 @@ package org.springframework.data.elasticsearch.client.elc;
|
|||||||
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
||||||
import co.elastic.clients.transport.ElasticsearchTransport;
|
import co.elastic.clients.transport.ElasticsearchTransport;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import org.elasticsearch.client.RestClient;
|
import org.elasticsearch.client.RestClient;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
@@ -38,10 +36,7 @@ public class AutoCloseableElasticsearchClient extends ElasticsearchClient implem
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws IOException {
|
public void close() throws Exception {
|
||||||
// since Elasticsearch 8.16 the ElasticsearchClient implements (through ApiClient) the Closeable interface and
|
transport.close();
|
||||||
// handles closing of the underlying transport. We now just call the base class, but keep this as we
|
|
||||||
// have been implementing AutoCloseable since 4.4 and won't change that to a mere Closeable
|
|
||||||
super.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2021-present the original author or authors.
|
* Copyright 2021-2025 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user