Compare commits
76 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e6c31972ca | |||
| 509157a969 | |||
| 08aad9bc65 | |||
| 0f0cf23779 | |||
| f02c338b61 | |||
| 737650ac54 | |||
| b3f21736b6 | |||
| fbed601efa | |||
| 5f2d71ef32 | |||
| 2904427e9b | |||
| 167f2246d3 | |||
| f09ce87f0e | |||
| 1d5c78a06a | |||
| 5a2dcd3b01 | |||
| 74b05d21b5 | |||
| 1895219322 | |||
| bd62128b52 | |||
| 16eb208d77 | |||
| 0575323975 | |||
| 4289f73b24 | |||
| 7f246724d2 | |||
| ce6b4d853f | |||
| c87d106074 | |||
| bf21b697ca | |||
| eead581ff0 | |||
| aef71db320 | |||
| 452c76fb12 | |||
| c9a47997b9 | |||
| 4a42c673ce | |||
| 4729b9cfdc | |||
| aa16c0c5ab | |||
| 5e507fa163 | |||
| a355537d78 | |||
| 4fbf9f8b5a | |||
| 2cb27c26d7 | |||
| c322797eab | |||
| c81958f62d | |||
| ed18be6f1c | |||
| b3a21fbb7c | |||
| d874b9d000 | |||
| 36e6a4b328 | |||
| 3710e47abd | |||
| c40abc267b | |||
| b479184d83 | |||
| f2370bc7df | |||
| 5f045d104e | |||
| b52e8d1431 | |||
| e86bb771be | |||
| c9fbc17109 | |||
| 397e155d5e | |||
| 4e52594d12 | |||
| 310f0ed567 | |||
| dab0be04db | |||
| e8f269d9ec | |||
| 1e9824ae2d | |||
| c9b8b3f33d | |||
| a806553169 | |||
| 27011d382b | |||
| 489a2605b4 | |||
| 953f840d7c | |||
| d905a4b25f | |||
| e2e6b5005b | |||
| 0d4e8ad6eb | |||
| a9bacd23b0 | |||
| 031f7c8c78 | |||
| 76187a4934 | |||
| b693494e17 | |||
| b324935d22 | |||
| 920f7c029f | |||
| 051777ee25 | |||
| 0fb98eda39 | |||
| df76b43cb4 | |||
| b681197d0f | |||
| 8a1323c11a | |||
| 033d71ccb6 | |||
| 0ae2a52de8 |
@@ -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: [ 6.0.x, 'issue/6.0.x/**' ]
|
|
||||||
|
|
||||||
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@4.0.x
|
|
||||||
with:
|
|
||||||
java-version: ${{ matrix.java-version }}
|
|
||||||
develocity-access-key: '${{ secrets.DEVELOCITY_ACCESS_KEY }}'
|
|
||||||
- name: Build
|
|
||||||
uses: spring-projects/spring-data-build/actions/maven-build@4.0.x
|
|
||||||
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,45 +0,0 @@
|
|||||||
# GitHub Actions to automate GitHub issues for Spring Data Project Management
|
|
||||||
|
|
||||||
name: Spring Data GitHub Issues
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [opened, edited, reopened]
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
pull_request_target:
|
|
||||||
types: [opened, edited, reopened]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Inbox:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: vars.PROJECT_CARDS_ENABLED == 'true' && github.repository_owner == 'spring-projects' && (github.event.action == 'opened' || github.event.action == 'reopened') && github.event.pull_request == null && !contains(join(github.event.issue.labels.*.name, ', '), 'dependency-upgrade') && !contains(github.event.issue.title, 'Release ')
|
|
||||||
steps:
|
|
||||||
- name: Create or Update Issue Card
|
|
||||||
uses: actions/add-to-project@v1.0.2
|
|
||||||
with:
|
|
||||||
project-url: https://github.com/orgs/spring-projects/projects/25
|
|
||||||
github-token: ${{ secrets.GH_ISSUES_TOKEN_SPRING_DATA }}
|
|
||||||
Pull-Request:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: vars.PROJECT_CARDS_ENABLED == 'true' && github.repository_owner == 'spring-projects' && (github.event.action == 'opened' || github.event.action == 'reopened') && github.event.pull_request != null
|
|
||||||
steps:
|
|
||||||
- name: Create or Update Pull Request Card
|
|
||||||
uses: actions/add-to-project@v1.0.2
|
|
||||||
with:
|
|
||||||
project-url: https://github.com/orgs/spring-projects/projects/25
|
|
||||||
github-token: ${{ secrets.GH_ISSUES_TOKEN_SPRING_DATA }}
|
|
||||||
Feedback-Provided:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: vars.PROJECT_CARDS_ENABLED == 'true' && github.repository_owner == 'spring-projects' && github.event_name == 'issue_comment' && github.event.action == 'created' && github.actor != 'spring-projects-issues' && github.event.pull_request == null && github.event.issue.state == 'open' && contains(toJSON(github.event.issue.labels), 'waiting-for-feedback')
|
|
||||||
steps:
|
|
||||||
- name: Update Project Card
|
|
||||||
uses: actions/add-to-project@v1.0.2
|
|
||||||
with:
|
|
||||||
project-url: https://github.com/orgs/spring-projects/projects/25
|
|
||||||
github-token: ${{ secrets.GH_ISSUES_TOKEN_SPRING_DATA }}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
name: Snapshots
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches: [ 6.0.x, 'issue/6.0.x/**' ]
|
|
||||||
|
|
||||||
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@4.0.x
|
|
||||||
with:
|
|
||||||
develocity-access-key: '${{ secrets.DEVELOCITY_ACCESS_KEY }}'
|
|
||||||
- name: Deploy to Artifactory
|
|
||||||
uses: spring-projects/spring-data-build/actions/maven-artifactory-deploy@4.0.x
|
|
||||||
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 }}'
|
|
||||||
@@ -33,4 +33,3 @@ node
|
|||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
.mvn/.develocity
|
.mvn/.develocity
|
||||||
/src/test/resources/testcontainers-local.properties
|
|
||||||
|
|||||||
+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.19</version>
|
||||||
</extension>
|
</extension>
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
|
|
||||||
--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
|
|
||||||
--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
|
|
||||||
--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
|
|
||||||
--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
|
|
||||||
--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
|
|
||||||
--add-exports jdk.compiler/com.sun.tools.javac.tree=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.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:59:45 CEST 2026
|
#Thu Nov 07 09:51:02 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.2.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>")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
-4
@@ -1,4 +1,6 @@
|
|||||||
= 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"]
|
image:https://spring.io/badges/spring-data-elasticsearch/ga.svg[Spring Data Elasticsearch,link=https://projects.spring.io/spring-data-elasticsearch#quick-start] image:https://spring.io/badges/spring-data-elasticsearch/snapshot.svg[Spring Data Elasticsearch,link=https://projects.spring.io/spring-data-elasticsearch#quick-start]
|
||||||
|
|
||||||
|
= 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-Gradle%20Enterprise-06A0CE?logo=Gradle&labelColor=02303A["Revved up by Gradle Enterprise", 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 +64,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
|
||||||
|
|
||||||
@@ -124,7 +126,8 @@ We’d love to help!
|
|||||||
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/[reference documentation], and https://docs.spring.io/spring-data/elasticsearch/docs/current/api/[Javadocs].
|
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/[reference documentation], and https://docs.spring.io/spring-data/elasticsearch/docs/current/api/[Javadocs].
|
||||||
* Learn the Spring basics – Spring Data builds on Spring Framework, check the https://spring.io[spring.io] web-site for a wealth of reference documentation.
|
* Learn the Spring basics – Spring Data builds on Spring Framework, check the https://spring.io[spring.io] web-site for a wealth of reference documentation.
|
||||||
If you are just starting out with Spring, try one of the https://spring.io/guides[guides].
|
If you are just starting out with Spring, try one of the https://spring.io/guides[guides].
|
||||||
* Ask a question or chat with the community on https://app.gitter.im/#/room/#spring-projects_spring-data:gitter.im[Gitter].
|
* Ask a question - we monitor https://stackoverflow.com[stackoverflow.com] for questions tagged with https://stackoverflow.com/tags/spring-data[`spring-data-elasticsearch`].
|
||||||
|
You can also chat with the community on https://gitter.im/spring-projects/spring-data[Gitter].
|
||||||
* Report bugs with Spring Data for Elasticsearch at https://github.com/spring-projects/spring-data-elasticsearch/issues[https://github.com/spring-projects/spring-data-elasticsearch/issues].
|
* Report bugs with Spring Data for Elasticsearch at https://github.com/spring-projects/spring-data-elasticsearch/issues[https://github.com/spring-projects/spring-data-elasticsearch/issues].
|
||||||
|
|
||||||
== Reporting Issues
|
== Reporting Issues
|
||||||
@@ -168,7 +171,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,34 @@
|
|||||||
|
# Java versions
|
||||||
|
java.main.tag=17.0.12_7-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
|
||||||
|
|
||||||
|
# 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.0.6</version>
|
<version>5.2.12</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.0.6</version>
|
<version>3.2.12</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.0.6</springdata.commons>
|
<springdata.commons>3.2.12</springdata.commons>
|
||||||
|
|
||||||
<!-- version of the ElasticsearchClient -->
|
<!-- version of the ElasticsearchClient -->
|
||||||
<elasticsearch-java>9.2.8</elasticsearch-java>
|
<elasticsearch-java>8.11.4</elasticsearch-java>
|
||||||
<elasticsearch-rest-client>9.2.8</elasticsearch-rest-client>
|
|
||||||
|
|
||||||
<hoverfly>0.20.2</hoverfly>
|
<hoverfly>0.14.4</hoverfly>
|
||||||
<log4j>2.25.1</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,26 +131,16 @@
|
|||||||
</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 -->
|
||||||
@@ -262,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>
|
||||||
@@ -297,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>
|
||||||
@@ -321,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>
|
||||||
@@ -330,14 +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>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--we need Murmur3Hash in a test, before 5.2 we had it from the old Elasticsearch dependency -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.tngtech.archunit</groupId>
|
<groupId>commons-codec</groupId>
|
||||||
<artifactId>archunit-junit5</artifactId>
|
<artifactId>commons-codec</artifactId>
|
||||||
<version>${archunit}</version>
|
<version>1.15</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -9,10 +9,6 @@
|
|||||||
*** xref:migration-guides/migration-guide-4.4-5.0.adoc[]
|
*** xref:migration-guides/migration-guide-4.4-5.0.adoc[]
|
||||||
*** 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.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[]
|
||||||
|
|||||||
@@ -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; <.>
|
||||||
|
|
||||||
@@ -291,7 +150,7 @@ ClientConfiguration clientConfiguration = ClientConfiguration.builder()
|
|||||||
return headers;
|
return headers;
|
||||||
})
|
})
|
||||||
.withClientConfigurer( <.>
|
.withClientConfigurer( <.>
|
||||||
ElasticsearchHttpClientConfigurationCallback.from(clientBuilder -> {
|
ElasticsearchClientConfigurationCallback.from(clientBuilder -> {
|
||||||
// ...
|
// ...
|
||||||
return clientBuilder;
|
return clientBuilder;
|
||||||
}))
|
}))
|
||||||
@@ -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`:
|
||||||
@@ -350,8 +192,7 @@ This callback provides a `org.elasticsearch.client.RestClientBuilder` that can b
|
|||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
ClientConfiguration.builder()
|
ClientConfiguration.builder()
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
.withClientConfigurer(ElasticsearchClients.ElasticsearchRestClientConfigurationCallback.from(restClientBuilder -> {
|
||||||
.withClientConfigurer(RestClients.ElasticsearchRestClientConfigurationCallback.from(restClientBuilder -> {
|
|
||||||
// configure the Elasticsearch RestClient
|
// configure the Elasticsearch RestClient
|
||||||
return restClientBuilder;
|
return restClientBuilder;
|
||||||
}))
|
}))
|
||||||
@@ -359,37 +200,17 @@ 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`.
|
||||||
|
|
||||||
====
|
====
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
ClientConfiguration.builder()
|
ClientConfiguration.builder()
|
||||||
.connectedTo("localhost:9200", "localhost:9291")
|
.withClientConfigurer(ElasticsearchClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
|
||||||
.withClientConfigurer(RestClients.ElasticsearchHttpClientConfigurationCallback.from(httpAsyncClientBuilder -> {
|
|
||||||
// configure the HttpAsyncClient
|
// configure the HttpAsyncClient
|
||||||
return httpAsyncClientBuilder;
|
return httpAsyncClientBuilder;
|
||||||
}))
|
}))
|
||||||
@@ -397,92 +218,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,41 +1,13 @@
|
|||||||
[[new-features]]
|
[[new-features]]
|
||||||
= What's new
|
= What's new
|
||||||
|
|
||||||
[[new-features.6-0-0]]
|
[[new-features.5-2-3]]
|
||||||
== New in Spring Data Elasticsearch 6.0
|
== New in Spring Data Elasticsearch 5.2.2
|
||||||
|
* Upgrade to Elasticsearch 8.11.4
|
||||||
|
|
||||||
* Upgrade to Spring 7
|
[[new-features.5-2-2]]
|
||||||
* Switch to jspecify nullability annotations
|
== New in Spring Data Elasticsearch 5.2.2
|
||||||
* Upgrade to Elasticsearch 9.2.2
|
* Upgrade to Elasticsearch 8.11.3
|
||||||
* 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 in Spring Data Elasticsearch 5.3
|
|
||||||
|
|
||||||
* Upgrade to Elasticsearch 8.13.2.
|
|
||||||
* Add support for highlight queries in highlighting.
|
|
||||||
* Add shard statistics to the `SearchHit` class.
|
|
||||||
* Add support for multi search template API.
|
|
||||||
* Add support for SpEL in @Query.
|
|
||||||
* Add support for field aliases in the index mapping.
|
|
||||||
* Add support for has_child and has_parent queries.
|
|
||||||
|
|
||||||
[[new-features.5-2-0]]
|
[[new-features.5-2-0]]
|
||||||
== New in Spring Data Elasticsearch 5.2
|
== New in Spring Data Elasticsearch 5.2
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class Statement {
|
|||||||
return routing;
|
return routing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRouting(String routing) {
|
public void setRouting(Routing routing) {
|
||||||
this.routing = routing;
|
this.routing = routing;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ void init() {
|
|||||||
repository.save(
|
repository.save(
|
||||||
Statement.builder()
|
Statement.builder()
|
||||||
.withText("+1 for the sun")
|
.withText("+1 for the sun")
|
||||||
.withRouting(savedWeather.getId())
|
,withRouting(savedWeather.getId())
|
||||||
.withRelation(new JoinField<>("vote", sunnyAnswer.getId())) <5>
|
.withRelation(new JoinField<>("vote", sunnyAnswer.getId())) <5>
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
@@ -226,7 +226,6 @@ SearchHits<Statement> hasVotes() {
|
|||||||
Query query = NativeQuery.builder()
|
Query query = NativeQuery.builder()
|
||||||
.withQuery(co.elastic.clients.elasticsearch._types.query_dsl.Query.of(qb -> qb
|
.withQuery(co.elastic.clients.elasticsearch._types.query_dsl.Query.of(qb -> qb
|
||||||
.hasChild(hc -> hc
|
.hasChild(hc -> hc
|
||||||
.type("answer")
|
|
||||||
.queryName("vote")
|
.queryName("vote")
|
||||||
.query(matchAllQueryAsQuery())
|
.query(matchAllQueryAsQuery())
|
||||||
.scoreMode(ChildScoreMode.None)
|
.scoreMode(ChildScoreMode.None)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -192,7 +192,8 @@ public String getProperty() {
|
|||||||
|
|
||||||
This annotation can be set on a String property of an entity.
|
This annotation can be set on a String property of an entity.
|
||||||
This property will not be written to the mapping, it will not be stored in Elasticsearch and its value will not be read from an Elasticsearch document.
|
This property will not be written to the mapping, it will not be stored in Elasticsearch and its value will not be read from an Elasticsearch document.
|
||||||
After an entity is persisted, for example with a call to `ElasticsearchOperations.save(T entity)`, the entity returned from that call will contain the name of the index that an entity was saved to in that property.
|
After an entity is persisted, for example with a call to `ElasticsearchOperations.save(T entity)`, the entity
|
||||||
|
returned from that call will contain the name of the index that an entity was saved to in that property.
|
||||||
This is useful when the index name is dynamically set by a bean, or when writing to a write alias.
|
This is useful when the index name is dynamically set by a bean, or when writing to a write alias.
|
||||||
|
|
||||||
Putting some value into such a property does not set the index into which an entity is stored!
|
Putting some value into such a property does not set the index into which an entity is stored!
|
||||||
@@ -422,6 +423,7 @@ Looking at the `Configuration` from the xref:elasticsearch/object-mapping.adoc#e
|
|||||||
@Configuration
|
@Configuration
|
||||||
public class Config extends ElasticsearchConfiguration {
|
public class Config extends ElasticsearchConfiguration {
|
||||||
|
|
||||||
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ClientConfiguration clientConfiguration() {
|
public ClientConfiguration clientConfiguration() {
|
||||||
return ClientConfiguration.builder() //
|
return ClientConfiguration.builder() //
|
||||||
|
|||||||
+2
-2
@@ -12,10 +12,10 @@ class Book {
|
|||||||
@Id
|
@Id
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
@Field(type = FieldType.Text)
|
@Field(type = FieldType.text)
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@Field(type = FieldType.Text)
|
@Field(type = FieldType.text)
|
||||||
private String summary;
|
private String summary;
|
||||||
|
|
||||||
@Field(type = FieldType.Integer)
|
@Field(type = FieldType.Integer)
|
||||||
|
|||||||
+4
-233
@@ -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]
|
||||||
----
|
----
|
||||||
{
|
{
|
||||||
@@ -370,223 +361,3 @@ So calling the method with a `List` of `["id1", "id2", "id3"]` would produce the
|
|||||||
}
|
}
|
||||||
----
|
----
|
||||||
====
|
====
|
||||||
|
|
||||||
[[elasticsearch.query-methods.at-query.spel]]
|
|
||||||
=== Using SpEL Expressions
|
|
||||||
|
|
||||||
.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`.
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|
||||||
@Query("""
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"term":{
|
|
||||||
"name": "#{#name}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
Page<Book> findByName(String name, Pageable pageable);
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
If for example the function is called with the parameter _John_, it would produce the following query body:
|
|
||||||
|
|
||||||
[source,json]
|
|
||||||
----
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"term":{
|
|
||||||
"name": "John"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
.accessing parameter property.
|
|
||||||
====
|
|
||||||
Supposing that we have the following class as query parameter type:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
public record QueryParameter(String value) {
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
It's easy to access the parameter by `#` symbol, then reference the property `value` with a simple `.`:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|
||||||
@Query("""
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"term":{
|
|
||||||
"name": "#{#parameter.value}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
Page<Book> findByName(QueryParameter parameter, Pageable pageable);
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
We can pass `new QueryParameter("John")` as the parameter now, and it will produce the same query string as above.
|
|
||||||
====
|
|
||||||
|
|
||||||
.accessing bean property.
|
|
||||||
====
|
|
||||||
{spring-framework-docs}/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:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|
||||||
@Query("""
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"term":{
|
|
||||||
"name": "#{@queryParameter.value}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
Page<Book> findByName(Pageable pageable);
|
|
||||||
}
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
.SpEL and `Collection` param.
|
|
||||||
====
|
|
||||||
`Collection` parameter is also supported and is as easy to use as normal `String`, such as the following `terms` query:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|
||||||
@Query("""
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"terms":{
|
|
||||||
"name": #{#names}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
Page<Book> findByName(Collection<String> names, Pageable pageable);
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
[source,json]
|
|
||||||
----
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"terms":{
|
|
||||||
"name": ["name1", "name2"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
.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`:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|
||||||
@Query("""
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"terms":{
|
|
||||||
"name": #{#parameters.![value]}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
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.
|
|
||||||
====
|
|
||||||
|
|
||||||
.alter parameter name by using `@Param`
|
|
||||||
====
|
|
||||||
When accessing the parameter by SpEL, it's also useful to alter the parameter name to another one by `@Param` annotation in Sping Data:
|
|
||||||
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
interface BookRepository extends ElasticsearchRepository<Book, String> {
|
|
||||||
@Query("""
|
|
||||||
{
|
|
||||||
"bool":{
|
|
||||||
"must":[
|
|
||||||
{
|
|
||||||
"terms":{
|
|
||||||
"name": #{#another.![value]}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
Page<Book> findByName(@Param("another") Collection<QueryParameter> parameters, Pageable pageable);
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
====
|
|
||||||
|
|
||||||
[[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;
|
||||||
@@ -194,7 +194,7 @@ In the following code this is used to run a query for a given gender and maximum
|
|||||||
|
|
||||||
var runtimeField = new RuntimeField("age", "long", """ <.>
|
var runtimeField = new RuntimeField("age", "long", """ <.>
|
||||||
Instant currentDate = Instant.ofEpochMilli(new Date().getTime());
|
Instant currentDate = Instant.ofEpochMilli(new Date().getTime());
|
||||||
Instant startDate = doc['birthDate'].value.toInstant();
|
Instant startDate = doc['birth-date'].value.toInstant();
|
||||||
emit (ChronoUnit.DAYS.between(startDate, currentDate) / 365);
|
emit (ChronoUnit.DAYS.between(startDate, currentDate) / 365);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
| 2025.1 | 6.0.x | 9.2.8 | 7.0.x
|
| 2023.1 (Vaughan) | 5.2.x | 8.11.4 | 6.1.x
|
||||||
| 2025.0 | 5.5.x | 8.18.1 | 6.2.x
|
| 2023.0 (Ullmann) | 5.1.x | 8.7.1 | 6.0.x
|
||||||
| 2024.1 | 5.4.xfootnote:oom[Out of maintenance] | 8.15.5 | 6.1.x
|
| 2022.0 (Turing) | 5.0.xfootnote:oom[Out of maintenance] | 8.5.3 | 6.0.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
|
|
||||||
| 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
|
||||||
| 2021.0 (Pascal) | 4.2.xfootnote:oom[] | 7.12.0 | 5.3.x
|
| 2021.0 (Pascal) | 4.2.xfootnote:oom[] | 7.12.0 | 5.3.x
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ Also the reactive implementation that was provided up to now has been moved here
|
|||||||
If you are using `ElasticsearchRestTemplate` directly and not the `ElasticsearchOperations` interface you'll need to adjust your imports as well.
|
If you are using `ElasticsearchRestTemplate` directly and not the `ElasticsearchOperations` interface you'll need to adjust your imports as well.
|
||||||
|
|
||||||
When working with the `NativeSearchQuery` class, you'll need to switch to the `NativeQuery` class, which can take a
|
When working with the `NativeSearchQuery` class, you'll need to switch to the `NativeQuery` class, which can take a
|
||||||
`Query` instance coming from the new Elasticsearch client libraries.
|
`Query` instance comign from the new Elasticsearch client libraries.
|
||||||
You'll find plenty of examples in the test code.
|
You'll find plenty of examples in the test code.
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-4.4-5.0.breaking-changes-records]]
|
[[elasticsearch-migration-guide-4.4-5.0.breaking-changes-records]]
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
[[elasticsearch-migration-guide-5.2-5.3]]
|
|
||||||
= Upgrading from 5.2.x to 5.3.x
|
|
||||||
|
|
||||||
This section describes breaking changes from version 5.2.x to 5.3.x and how removed features can be replaced by new introduced features.
|
|
||||||
|
|
||||||
[[elasticsearch-migration-guide-5.2-5.3.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 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 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
|
|
||||||
`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]]
|
|
||||||
== Deprecations
|
|
||||||
|
|
||||||
=== Removals
|
|
||||||
|
|
||||||
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.
|
|
||||||
@@ -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>>)
|
|
||||||
```
|
|
||||||
@@ -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-2024 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-2024 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,7 +26,8 @@ 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;
|
||||||
|
|
||||||
private final String reason;
|
private final String reason;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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.
|
||||||
@@ -39,173 +39,41 @@ public enum DateFormat {
|
|||||||
basic_t_time("'T'HHmmss.SSSXXX"), //
|
basic_t_time("'T'HHmmss.SSSXXX"), //
|
||||||
basic_t_time_no_millis("'T'HHmmssXXX"), //
|
basic_t_time_no_millis("'T'HHmmssXXX"), //
|
||||||
basic_week_date("YYYY'W'wwe"), // week-based-year!
|
basic_week_date("YYYY'W'wwe"), // week-based-year!
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_basic_week_date("YYYY'W'wwe"), // week-based-year!
|
|
||||||
basic_week_date_time("YYYY'W'wwe'T'HHmmss.SSSX"), // here Elasticsearch uses a different zone format
|
basic_week_date_time("YYYY'W'wwe'T'HHmmss.SSSX"), // here Elasticsearch uses a different zone format
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_basic_week_date_time("YYYY'W'wwe'T'HHmmss.SSSX"), // here Elasticsearch uses a different zone format
|
|
||||||
basic_week_date_time_no_millis("YYYY'W'wwe'T'HHmmssX"), //
|
basic_week_date_time_no_millis("YYYY'W'wwe'T'HHmmssX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_basic_week_date_time_no_millis("YYYY'W'wwe'T'HHmmssX"), //
|
|
||||||
date("uuuu-MM-dd"), //
|
date("uuuu-MM-dd"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date("uuuu-MM-dd"), //
|
|
||||||
date_hour("uuuu-MM-dd'T'HH"), //
|
date_hour("uuuu-MM-dd'T'HH"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_hour("uuuu-MM-dd'T'HH"), //
|
|
||||||
date_hour_minute("uuuu-MM-dd'T'HH:mm"), //
|
date_hour_minute("uuuu-MM-dd'T'HH:mm"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_hour_minute("uuuu-MM-dd'T'HH:mm"), //
|
|
||||||
date_hour_minute_second("uuuu-MM-dd'T'HH:mm:ss"), //
|
date_hour_minute_second("uuuu-MM-dd'T'HH:mm:ss"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_hour_minute_second("uuuu-MM-dd'T'HH:mm:ss"), //
|
|
||||||
date_hour_minute_second_fraction("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
|
date_hour_minute_second_fraction("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_hour_minute_second_fraction("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
|
|
||||||
date_hour_minute_second_millis("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
|
date_hour_minute_second_millis("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_hour_minute_second_millis("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
|
|
||||||
date_optional_time("uuuu-MM-dd['T'HH:mm:ss.SSSXXX]"), //
|
date_optional_time("uuuu-MM-dd['T'HH:mm:ss.SSSXXX]"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_optional_time("uuuu-MM-dd['T'HH:mm:ss.SSSXXX]"), //
|
|
||||||
strict_date_optional_time_nanos("uuuu-MM-dd['T'HH:mm:ss.SSSSSSXXX]"), //
|
strict_date_optional_time_nanos("uuuu-MM-dd['T'HH:mm:ss.SSSSSSXXX]"), //
|
||||||
date_time("uuuu-MM-dd'T'HH:mm:ss.SSSXXX"), //
|
date_time("uuuu-MM-dd'T'HH:mm:ss.SSSXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_time("uuuu-MM-dd'T'HH:mm:ss.SSSXXX"), //
|
|
||||||
date_time_no_millis("uuuu-MM-dd'T'HH:mm:ssVV"), // here Elasticsearch uses the zone-id in its implementation
|
date_time_no_millis("uuuu-MM-dd'T'HH:mm:ssVV"), // here Elasticsearch uses the zone-id in its implementation
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_date_time_no_millis("uuuu-MM-dd'T'HH:mm:ssVV"), // here Elasticsearch uses the zone-id in its implementation
|
|
||||||
epoch_millis("epoch_millis"), //
|
epoch_millis("epoch_millis"), //
|
||||||
epoch_second("epoch_second"), //
|
epoch_second("epoch_second"), //
|
||||||
hour("HH"), //
|
hour("HH"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_hour("HH"), //
|
|
||||||
hour_minute("HH:mm"), //
|
hour_minute("HH:mm"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_hour_minute("HH:mm"), //
|
|
||||||
hour_minute_second("HH:mm:ss"), //
|
hour_minute_second("HH:mm:ss"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_hour_minute_second("HH:mm:ss"), //
|
|
||||||
hour_minute_second_fraction("HH:mm:ss.SSS"), //
|
hour_minute_second_fraction("HH:mm:ss.SSS"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_hour_minute_second_fraction("HH:mm:ss.SSS"), //
|
|
||||||
hour_minute_second_millis("HH:mm:ss.SSS"), //
|
hour_minute_second_millis("HH:mm:ss.SSS"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_hour_minute_second_millis("HH:mm:ss.SSS"), //
|
|
||||||
ordinal_date("uuuu-DDD"), //
|
ordinal_date("uuuu-DDD"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_ordinal_date("uuuu-DDD"), //
|
|
||||||
ordinal_date_time("uuuu-DDD'T'HH:mm:ss.SSSXXX"), //
|
ordinal_date_time("uuuu-DDD'T'HH:mm:ss.SSSXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_ordinal_date_time("uuuu-DDD'T'HH:mm:ss.SSSXXX"), //
|
|
||||||
ordinal_date_time_no_millis("uuuu-DDD'T'HH:mm:ssXXX"), //
|
ordinal_date_time_no_millis("uuuu-DDD'T'HH:mm:ssXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_ordinal_date_time_no_millis("uuuu-DDD'T'HH:mm:ssXXX"), //
|
|
||||||
time("HH:mm:ss.SSSXXX"), //
|
time("HH:mm:ss.SSSXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_time("HH:mm:ss.SSSXXX"), //
|
|
||||||
time_no_millis("HH:mm:ssXXX"), //
|
time_no_millis("HH:mm:ssXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_time_no_millis("HH:mm:ssXXX"), //
|
|
||||||
t_time("'T'HH:mm:ss.SSSXXX"), //
|
t_time("'T'HH:mm:ss.SSSXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_t_time("'T'HH:mm:ss.SSSXXX"), //
|
|
||||||
t_time_no_millis("'T'HH:mm:ssXXX"), //
|
t_time_no_millis("'T'HH:mm:ssXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_t_time_no_millis("'T'HH:mm:ssXXX"), //
|
|
||||||
week_date("YYYY-'W'ww-e"), //
|
week_date("YYYY-'W'ww-e"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_week_date("YYYY-'W'ww-e"), //
|
|
||||||
week_date_time("YYYY-'W'ww-e'T'HH:mm:ss.SSSXXX"), //
|
week_date_time("YYYY-'W'ww-e'T'HH:mm:ss.SSSXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_week_date_time("YYYY-'W'ww-e'T'HH:mm:ss.SSSXXX"), //
|
|
||||||
week_date_time_no_millis("YYYY-'W'ww-e'T'HH:mm:ssXXX"), //
|
week_date_time_no_millis("YYYY-'W'ww-e'T'HH:mm:ssXXX"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_week_date_time_no_millis("YYYY-'W'ww-e'T'HH:mm:ssXXX"), //
|
|
||||||
weekyear(""), // no TemporalAccessor available for these 3
|
weekyear(""), // no TemporalAccessor available for these 3
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_weekyear(""), // no TemporalAccessor available for these 3
|
|
||||||
weekyear_week(""), //
|
weekyear_week(""), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_weekyear_week(""), //
|
|
||||||
weekyear_week_day(""), //
|
weekyear_week_day(""), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_strict_weekyear_week_day(""), //
|
|
||||||
year("uuuu"), //
|
year("uuuu"), //
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_year("uuuu"), //
|
|
||||||
year_month("uuuu-MM"), //
|
year_month("uuuu-MM"), //
|
||||||
/**
|
year_month_day("uuuu-MM-dd"); //
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_year_month("uuuu-MM"), //
|
|
||||||
year_month_day("uuuu-MM-dd"), //
|
|
||||||
/**
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
strict_year_month_day("uuuu-MM-dd"); //
|
|
||||||
|
|
||||||
private final String pattern;
|
private final String pattern;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2013-present the original author or authors.
|
* Copyright 2013-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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
-4
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020-present the original author or authors.
|
* Copyright 2020-2024 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.
|
||||||
@@ -21,7 +21,6 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Peter-Josef Meisch
|
* @author Peter-Josef Meisch
|
||||||
* @author Haibo Liu
|
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
@Documented
|
@Documented
|
||||||
@@ -60,8 +59,6 @@ public @interface HighlightParameters {
|
|||||||
|
|
||||||
int numberOfFragments() default -1;
|
int numberOfFragments() default -1;
|
||||||
|
|
||||||
Query highlightQuery() default @Query;
|
|
||||||
|
|
||||||
String order() default "";
|
String order() default "";
|
||||||
|
|
||||||
int phraseLimit() default -1;
|
int phraseLimit() default -1;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2019-present the original author or authors.
|
* Copyright 2019-2024 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-2024 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.
|
||||||
|
|||||||
+8
-5
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2023-present the original author or authors.
|
* Copyright 2023-2024 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,6 +15,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
package org.springframework.data.elasticsearch.annotations;
|
||||||
|
|
||||||
|
import org.springframework.data.annotation.ReadOnlyProperty;
|
||||||
|
import org.springframework.data.annotation.Transient;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.ElementType;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@@ -22,10 +25,10 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Annotation to mark a String property of an entity to be filled with the name of the index where the entity was stored
|
* Annotation to mark a String property of an entity to be filled with the name of the index where the entity was
|
||||||
* after it is indexed into Elasticsearch. This can be used when the name of the index is dynamically created or when a
|
* stored after it is indexed into Elasticsearch. This can be used when the name of the index is dynamically created
|
||||||
* document was indexed into a write alias.
|
* or when a document was indexed into a write alias.
|
||||||
* <p>
|
*
|
||||||
* This can not be used to specify the index where an entity should be written to.
|
* This can not be used to specify the index where an entity should be written to.
|
||||||
*
|
*
|
||||||
* @author Peter-Josef Meisch
|
* @author Peter-Josef Meisch
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-present the original author or authors.
|
* Copyright 2014-2024 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-2024 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-2024 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-2024 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.
|
||||||
@@ -74,14 +74,7 @@ public @interface Mapping {
|
|||||||
*/
|
*/
|
||||||
String runtimeFieldsPath() default "";
|
String runtimeFieldsPath() default "";
|
||||||
|
|
||||||
/**
|
|
||||||
* field alias definitions to be written to the index mapping
|
|
||||||
*
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
MappingAlias[] aliases() default {};
|
|
||||||
|
|
||||||
enum Detection {
|
enum Detection {
|
||||||
DEFAULT, TRUE, FALSE
|
DEFAULT, TRUE, FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +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.Documented;
|
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines a field alias in the index mapping.
|
|
||||||
*
|
|
||||||
* @author Peter-Josef Meisch
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target(ElementType.FIELD)
|
|
||||||
@Documented
|
|
||||||
@Inherited
|
|
||||||
public @interface MappingAlias {
|
|
||||||
/**
|
|
||||||
* the name of the alias.
|
|
||||||
*/
|
|
||||||
String name();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the path of the alias.
|
|
||||||
*/
|
|
||||||
String path();
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-present the original author or authors.
|
* Copyright 2014-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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 2021-present the original author or authors.
|
* Copyright 2021-2024 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.
|
||||||
@@ -41,7 +41,7 @@ public @interface ValueConverter {
|
|||||||
* Defines the class implementing the {@link PropertyValueConverter} interface. If this is a normal class, it must
|
* Defines the class implementing the {@link PropertyValueConverter} interface. If this is a normal class, it must
|
||||||
* provide a default constructor with no arguments. If this is an enum and thus implementing a singleton by enum it
|
* provide a default constructor with no arguments. If this is an enum and thus implementing a singleton by enum it
|
||||||
* must only have one enum value.
|
* must only have one enum value.
|
||||||
*
|
*
|
||||||
* @return the class to use for conversion
|
* @return the class to use for conversion
|
||||||
*/
|
*/
|
||||||
Class<? extends PropertyValueConverter> value();
|
Class<? extends PropertyValueConverter> value();
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2024 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-2024 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,2 +1,3 @@
|
|||||||
@org.jspecify.annotations.NullMarked
|
@org.springframework.lang.NonNullApi
|
||||||
|
@org.springframework.lang.NonNullFields
|
||||||
package org.springframework.data.elasticsearch.annotations;
|
package org.springframework.data.elasticsearch.annotations;
|
||||||
|
|||||||
+4
-4
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2023-present the original author or authors.
|
* Copyright 2023-2024 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
|
||||||
@@ -25,11 +25,11 @@ import org.springframework.data.core.ReactiveWrappers;
|
|||||||
*/
|
*/
|
||||||
public class ElasticsearchAotPredicates {
|
public class ElasticsearchAotPredicates {
|
||||||
|
|
||||||
public static final Predicate<ReactiveWrappers.ReactiveLibrary> IS_REACTIVE_LIBRARY_AVAILABLE = (
|
public static final Predicate<ReactiveWrappers.ReactiveLibrary> IS_REACTIVE_LIBARARY_AVAILABLE = (
|
||||||
lib) -> ReactiveWrappers.isAvailable(lib);
|
lib) -> ReactiveWrappers.isAvailable(lib);
|
||||||
|
|
||||||
public static boolean isReactorPresent() {
|
public static boolean isReactorPresent() {
|
||||||
return IS_REACTIVE_LIBRARY_AVAILABLE.test(ReactiveWrappers.ReactiveLibrary.PROJECT_REACTOR);
|
return IS_REACTIVE_LIBARARY_AVAILABLE.test(ReactiveWrappers.ReactiveLibrary.PROJECT_REACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2023-present the original author or authors.
|
* Copyright 2023-2024 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,2 +1,3 @@
|
|||||||
@org.jspecify.annotations.NullMarked
|
@org.springframework.lang.NonNullApi
|
||||||
|
@org.springframework.lang.NonNullFields
|
||||||
package org.springframework.data.elasticsearch.aot;
|
package org.springframework.data.elasticsearch.aot;
|
||||||
|
|||||||
+3
-18
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2024 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();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -239,15 +233,6 @@ public interface ClientConfiguration {
|
|||||||
*/
|
*/
|
||||||
TerminalClientConfigurationBuilder usingSsl();
|
TerminalClientConfigurationBuilder usingSsl();
|
||||||
|
|
||||||
/**
|
|
||||||
* Connects using https if flag is true.
|
|
||||||
*
|
|
||||||
* @param flag whether to use https in the connection
|
|
||||||
* @return the {@link TerminalClientConfigurationBuilder}
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
TerminalClientConfigurationBuilder usingSsl(boolean flag);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connect via {@literal https} using the given {@link SSLContext}.<br />
|
* Connect via {@literal https} using the given {@link SSLContext}.<br />
|
||||||
* <strong>NOTE</strong> You need to leave out the protocol in
|
* <strong>NOTE</strong> You need to leave out the protocol in
|
||||||
|
|||||||
+3
-9
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2024 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,12 @@ 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.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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -105,13 +106,6 @@ class ClientConfigurationBuilder
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public TerminalClientConfigurationBuilder usingSsl(boolean flag) {
|
|
||||||
|
|
||||||
this.useSsl = flag;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
* @see org.springframework.data.elasticsearch.client.ClientConfiguration.MaybeSecureClientConfigurationBuilder#usingSsl(javax.net.ssl.SSLContext)
|
* @see org.springframework.data.elasticsearch.client.ClientConfiguration.MaybeSecureClientConfigurationBuilder#usingSsl(javax.net.ssl.SSLContext)
|
||||||
|
|||||||
+3
-2
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2018-present the original author or authors.
|
* Copyright 2018-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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.
|
||||||
|
|||||||
-70
@@ -1,70 +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.client.elc;
|
|
||||||
|
|
||||||
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.Query;
|
|
||||||
import org.springframework.data.elasticsearch.core.query.StringQuery;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An abstract class that serves as a base for query processors. It provides a common interface and basic functionality
|
|
||||||
* for query processing.
|
|
||||||
*
|
|
||||||
* @author Aouichaoui Youssef
|
|
||||||
* @since 5.3
|
|
||||||
*/
|
|
||||||
public abstract class AbstractQueryProcessor {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a spring-data-elasticsearch {@literal query} to an Elasticsearch {@literal query}.
|
|
||||||
*
|
|
||||||
* @param query spring-data-elasticsearch {@literal query}.
|
|
||||||
* @param queryConverter correct mapped field names and the values to the converted values.
|
|
||||||
* @return an Elasticsearch {@literal query}.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static co.elastic.clients.elasticsearch._types.query_dsl.@Nullable Query getEsQuery(@Nullable Query query,
|
|
||||||
@Nullable Consumer<Query> queryConverter) {
|
|
||||||
if (query == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (queryConverter != null) {
|
|
||||||
queryConverter.accept(query);
|
|
||||||
}
|
|
||||||
|
|
||||||
co.elastic.clients.elasticsearch._types.query_dsl.Query esQuery = null;
|
|
||||||
|
|
||||||
if (query instanceof CriteriaQuery criteriaQuery) {
|
|
||||||
esQuery = CriteriaQueryProcessor.createQuery(criteriaQuery.getCriteria());
|
|
||||||
} else if (query instanceof StringQuery stringQuery) {
|
|
||||||
esQuery = Queries.wrapperQueryAsQuery(stringQuery.getSource());
|
|
||||||
} else if (query instanceof NativeQuery nativeQuery) {
|
|
||||||
if (nativeQuery.getQuery() != null) {
|
|
||||||
esQuery = nativeQuery.getQuery();
|
|
||||||
} else if (nativeQuery.getSpringDataQuery() != null) {
|
|
||||||
esQuery = getEsQuery(nativeQuery.getSpringDataQuery(), queryConverter);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new IllegalArgumentException("unhandled Query implementation " + query.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
return esQuery;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2022-present the original author or authors.
|
* Copyright 2022-2024 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