├── .gitignore
├── .mvn
└── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── data
└── elasticsearch
│ └── nodes
│ └── 0
│ ├── _state
│ └── global-1.st
│ ├── indices
│ └── users
│ │ ├── 0
│ │ ├── _state
│ │ │ └── state-1.st
│ │ ├── index
│ │ │ ├── _1.cfe
│ │ │ ├── _1.cfs
│ │ │ ├── _1.si
│ │ │ ├── segments_4
│ │ │ └── write.lock
│ │ └── translog
│ │ │ ├── translog-4.tlog
│ │ │ └── translog.ckp
│ │ └── _state
│ │ └── state-6.st
│ └── node.lock
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── techprimers
│ │ └── elastic
│ │ ├── SpringElasticDemoApplication.java
│ │ ├── builder
│ │ └── SearchQueryBuilder.java
│ │ ├── config
│ │ └── ElasticConfiguration.java
│ │ ├── load
│ │ └── Loaders.java
│ │ ├── model
│ │ └── Users.java
│ │ ├── repository
│ │ └── UsersRepository.java
│ │ └── resource
│ │ ├── ManualSearchResource.java
│ │ └── SearchResource.java
└── resources
│ └── application.properties
└── test
└── java
└── com
└── techprimers
└── elastic
└── SpringElasticDemoApplicationTests.java
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 |
12 | ### IntelliJ IDEA ###
13 | .idea
14 | *.iws
15 | *.iml
16 | *.ipr
17 |
18 | ### NetBeans ###
19 | nbproject/private/
20 | build/
21 | nbbuild/
22 | dist/
23 | nbdist/
24 | .nb-gradle/
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip
2 |
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/_state/global-1.st:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/_state/global-1.st
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/_state/state-1.st:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/0/_state/state-1.st
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/index/_1.cfe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/0/index/_1.cfe
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/index/_1.cfs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/0/index/_1.cfs
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/index/_1.si:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/0/index/_1.si
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/index/segments_4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/0/index/segments_4
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/index/write.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/0/index/write.lock
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/translog/translog-4.tlog:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/0/translog/translog-4.tlog
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/0/translog/translog.ckp:
--------------------------------------------------------------------------------
1 | +
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/indices/users/_state/state-6.st:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/indices/users/_state/state-6.st
--------------------------------------------------------------------------------
/data/elasticsearch/nodes/0/node.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/data/elasticsearch/nodes/0/node.lock
--------------------------------------------------------------------------------
/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Maven2 Start Up Batch script
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # M2_HOME - location of maven2's installed home dir
31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
32 | # e.g. to debug Maven itself, use
33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35 | # ----------------------------------------------------------------------------
36 |
37 | if [ -z "$MAVEN_SKIP_RC" ] ; then
38 |
39 | if [ -f /etc/mavenrc ] ; then
40 | . /etc/mavenrc
41 | fi
42 |
43 | if [ -f "$HOME/.mavenrc" ] ; then
44 | . "$HOME/.mavenrc"
45 | fi
46 |
47 | fi
48 |
49 | # OS specific support. $var _must_ be set to either true or false.
50 | cygwin=false;
51 | darwin=false;
52 | mingw=false
53 | case "`uname`" in
54 | CYGWIN*) cygwin=true ;;
55 | MINGW*) mingw=true;;
56 | Darwin*) darwin=true
57 | #
58 | # Look for the Apple JDKs first to preserve the existing behaviour, and then look
59 | # for the new JDKs provided by Oracle.
60 | #
61 | if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
62 | #
63 | # Apple JDKs
64 | #
65 | export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
66 | fi
67 |
68 | if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
69 | #
70 | # Apple JDKs
71 | #
72 | export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
73 | fi
74 |
75 | if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
76 | #
77 | # Oracle JDKs
78 | #
79 | export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
80 | fi
81 |
82 | if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
83 | #
84 | # Apple JDKs
85 | #
86 | export JAVA_HOME=`/usr/libexec/java_home`
87 | fi
88 | ;;
89 | esac
90 |
91 | if [ -z "$JAVA_HOME" ] ; then
92 | if [ -r /etc/gentoo-release ] ; then
93 | JAVA_HOME=`java-config --jre-home`
94 | fi
95 | fi
96 |
97 | if [ -z "$M2_HOME" ] ; then
98 | ## resolve links - $0 may be a link to maven's home
99 | PRG="$0"
100 |
101 | # need this for relative symlinks
102 | while [ -h "$PRG" ] ; do
103 | ls=`ls -ld "$PRG"`
104 | link=`expr "$ls" : '.*-> \(.*\)$'`
105 | if expr "$link" : '/.*' > /dev/null; then
106 | PRG="$link"
107 | else
108 | PRG="`dirname "$PRG"`/$link"
109 | fi
110 | done
111 |
112 | saveddir=`pwd`
113 |
114 | M2_HOME=`dirname "$PRG"`/..
115 |
116 | # make it fully qualified
117 | M2_HOME=`cd "$M2_HOME" && pwd`
118 |
119 | cd "$saveddir"
120 | # echo Using m2 at $M2_HOME
121 | fi
122 |
123 | # For Cygwin, ensure paths are in UNIX format before anything is touched
124 | if $cygwin ; then
125 | [ -n "$M2_HOME" ] &&
126 | M2_HOME=`cygpath --unix "$M2_HOME"`
127 | [ -n "$JAVA_HOME" ] &&
128 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
129 | [ -n "$CLASSPATH" ] &&
130 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
131 | fi
132 |
133 | # For Migwn, ensure paths are in UNIX format before anything is touched
134 | if $mingw ; then
135 | [ -n "$M2_HOME" ] &&
136 | M2_HOME="`(cd "$M2_HOME"; pwd)`"
137 | [ -n "$JAVA_HOME" ] &&
138 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
139 | # TODO classpath?
140 | fi
141 |
142 | if [ -z "$JAVA_HOME" ]; then
143 | javaExecutable="`which javac`"
144 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
145 | # readlink(1) is not available as standard on Solaris 10.
146 | readLink=`which readlink`
147 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
148 | if $darwin ; then
149 | javaHome="`dirname \"$javaExecutable\"`"
150 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
151 | else
152 | javaExecutable="`readlink -f \"$javaExecutable\"`"
153 | fi
154 | javaHome="`dirname \"$javaExecutable\"`"
155 | javaHome=`expr "$javaHome" : '\(.*\)/bin'`
156 | JAVA_HOME="$javaHome"
157 | export JAVA_HOME
158 | fi
159 | fi
160 | fi
161 |
162 | if [ -z "$JAVACMD" ] ; then
163 | if [ -n "$JAVA_HOME" ] ; then
164 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
165 | # IBM's JDK on AIX uses strange locations for the executables
166 | JAVACMD="$JAVA_HOME/jre/sh/java"
167 | else
168 | JAVACMD="$JAVA_HOME/bin/java"
169 | fi
170 | else
171 | JAVACMD="`which java`"
172 | fi
173 | fi
174 |
175 | if [ ! -x "$JAVACMD" ] ; then
176 | echo "Error: JAVA_HOME is not defined correctly." >&2
177 | echo " We cannot execute $JAVACMD" >&2
178 | exit 1
179 | fi
180 |
181 | if [ -z "$JAVA_HOME" ] ; then
182 | echo "Warning: JAVA_HOME environment variable is not set."
183 | fi
184 |
185 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
186 |
187 | # For Cygwin, switch paths to Windows format before running java
188 | if $cygwin; then
189 | [ -n "$M2_HOME" ] &&
190 | M2_HOME=`cygpath --path --windows "$M2_HOME"`
191 | [ -n "$JAVA_HOME" ] &&
192 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
193 | [ -n "$CLASSPATH" ] &&
194 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
195 | fi
196 |
197 | # traverses directory structure from process work directory to filesystem root
198 | # first directory with .mvn subdirectory is considered project base directory
199 | find_maven_basedir() {
200 | local basedir=$(pwd)
201 | local wdir=$(pwd)
202 | while [ "$wdir" != '/' ] ; do
203 | if [ -d "$wdir"/.mvn ] ; then
204 | basedir=$wdir
205 | break
206 | fi
207 | wdir=$(cd "$wdir/.."; pwd)
208 | done
209 | echo "${basedir}"
210 | }
211 |
212 | # concatenates all lines of a file
213 | concat_lines() {
214 | if [ -f "$1" ]; then
215 | echo "$(tr -s '\n' ' ' < "$1")"
216 | fi
217 | }
218 |
219 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
220 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
221 |
222 | # Provide a "standardized" way to retrieve the CLI args that will
223 | # work with both Windows and non-Windows executions.
224 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
225 | export MAVEN_CMD_LINE_ARGS
226 |
227 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
228 |
229 | exec "$JAVACMD" \
230 | $MAVEN_OPTS \
231 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
232 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
233 | ${WRAPPER_LAUNCHER} "$@"
234 |
--------------------------------------------------------------------------------
/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM http://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Maven2 Start Up Batch script
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM M2_HOME - location of maven2's installed home dir
28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | @REM e.g. to debug Maven itself, use
32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | @REM ----------------------------------------------------------------------------
35 |
36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37 | @echo off
38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
40 |
41 | @REM set %HOME% to equivalent of $HOME
42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
43 |
44 | @REM Execute a user defined script before this one
45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
49 | :skipRcPre
50 |
51 | @setlocal
52 |
53 | set ERROR_CODE=0
54 |
55 | @REM To isolate internal variables from possible post scripts, we use another setlocal
56 | @setlocal
57 |
58 | @REM ==== START VALIDATION ====
59 | if not "%JAVA_HOME%" == "" goto OkJHome
60 |
61 | echo.
62 | echo Error: JAVA_HOME not found in your environment. >&2
63 | echo Please set the JAVA_HOME variable in your environment to match the >&2
64 | echo location of your Java installation. >&2
65 | echo.
66 | goto error
67 |
68 | :OkJHome
69 | if exist "%JAVA_HOME%\bin\java.exe" goto init
70 |
71 | echo.
72 | echo Error: JAVA_HOME is set to an invalid directory. >&2
73 | echo JAVA_HOME = "%JAVA_HOME%" >&2
74 | echo Please set the JAVA_HOME variable in your environment to match the >&2
75 | echo location of your Java installation. >&2
76 | echo.
77 | goto error
78 |
79 | @REM ==== END VALIDATION ====
80 |
81 | :init
82 |
83 | set MAVEN_CMD_LINE_ARGS=%*
84 |
85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86 | @REM Fallback to current working directory if not found.
87 |
88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90 |
91 | set EXEC_DIR=%CD%
92 | set WDIR=%EXEC_DIR%
93 | :findBaseDir
94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
95 | cd ..
96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
97 | set WDIR=%CD%
98 | goto findBaseDir
99 |
100 | :baseDirFound
101 | set MAVEN_PROJECTBASEDIR=%WDIR%
102 | cd "%EXEC_DIR%"
103 | goto endDetectBaseDir
104 |
105 | :baseDirNotFound
106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107 | cd "%EXEC_DIR%"
108 |
109 | :endDetectBaseDir
110 |
111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112 |
113 | @setlocal EnableExtensions EnableDelayedExpansion
114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116 |
117 | :endReadAdditionalConfig
118 |
119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120 |
121 | set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
122 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
123 |
124 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
125 | if ERRORLEVEL 1 goto error
126 | goto end
127 |
128 | :error
129 | set ERROR_CODE=1
130 |
131 | :end
132 | @endlocal & set ERROR_CODE=%ERROR_CODE%
133 |
134 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
135 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
136 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
137 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
138 | :skipRcPost
139 |
140 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
141 | if "%MAVEN_BATCH_PAUSE%" == "on" pause
142 |
143 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
144 |
145 | exit /B %ERROR_CODE%
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.techprimers.elastic
7 | spring-elastic-demo
8 | 0.0.1-SNAPSHOT
9 | jar
10 |
11 | spring-elastic-demo
12 | Demo project for Spring Boot
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.5.2.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | UTF-8
24 | 1.8
25 |
26 |
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-data-elasticsearch
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-data-jpa
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-rest
39 |
40 |
41 | org.springframework.boot
42 | spring-boot-starter-web
43 |
44 |
45 |
46 | com.h2database
47 | h2
48 | runtime
49 |
50 |
51 | org.springframework.boot
52 | spring-boot-starter-test
53 | test
54 |
55 |
56 |
57 |
58 |
59 |
60 | org.springframework.boot
61 | spring-boot-maven-plugin
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/SpringElasticDemoApplication.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SpringElasticDemoApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SpringElasticDemoApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/builder/SearchQueryBuilder.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic.builder;
2 |
3 | import com.techprimers.elastic.model.Users;
4 | import org.elasticsearch.index.query.QueryBuilder;
5 | import org.elasticsearch.index.query.QueryBuilders;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
8 | import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
9 | import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
10 | import org.springframework.stereotype.Component;
11 |
12 | import java.util.List;
13 |
14 | @Component
15 | public class SearchQueryBuilder {
16 |
17 | @Autowired
18 | private ElasticsearchTemplate elasticsearchTemplate;
19 |
20 |
21 | public List getAll(String text) {
22 |
23 | QueryBuilder query = QueryBuilders.boolQuery()
24 | .should(
25 | QueryBuilders.queryStringQuery(text)
26 | .lenient(true)
27 | .field("name")
28 | .field("teamName")
29 | ).should(QueryBuilders.queryStringQuery("*" + text + "*")
30 | .lenient(true)
31 | .field("name")
32 | .field("teamName"));
33 |
34 | NativeSearchQuery build = new NativeSearchQueryBuilder()
35 | .withQuery(query)
36 | .build();
37 |
38 | List userses = elasticsearchTemplate.queryForList(build, Users.class);
39 |
40 | return userses;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/config/ElasticConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic.config;
2 |
3 | import org.elasticsearch.common.settings.Settings;
4 | import org.elasticsearch.node.NodeBuilder;
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 | import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
8 | import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
9 | import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
10 |
11 | import java.io.File;
12 | import java.io.IOException;
13 |
14 | @Configuration
15 | @EnableElasticsearchRepositories(basePackages = "com.techprimers.elastic.repository")
16 | public class ElasticConfiguration {
17 |
18 |
19 | @Bean
20 | public NodeBuilder nodeBuilder() {
21 | return new NodeBuilder();
22 | }
23 |
24 | @Bean
25 | public ElasticsearchOperations elasticsearchTemplate() throws IOException {
26 | File tmpDir = File.createTempFile("elastic", Long.toString(System.nanoTime()));
27 | System.out.println("Temp directory: " + tmpDir.getAbsolutePath());
28 | Settings.Builder elasticsearchSettings =
29 | Settings.settingsBuilder()
30 | .put("http.enabled", "true") // 1
31 | .put("index.number_of_shards", "1")
32 | .put("path.data", new File(tmpDir, "data").getAbsolutePath()) // 2
33 | .put("path.logs", new File(tmpDir, "logs").getAbsolutePath()) // 2
34 | .put("path.work", new File(tmpDir, "work").getAbsolutePath()) // 2
35 | .put("path.home", tmpDir); // 3
36 |
37 |
38 |
39 | return new ElasticsearchTemplate(nodeBuilder()
40 | .local(true)
41 | .settings(elasticsearchSettings.build())
42 | .node()
43 | .client());
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/load/Loaders.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic.load;
2 |
3 | import com.techprimers.elastic.model.Users;
4 | import com.techprimers.elastic.repository.UsersRepository;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
7 | import org.springframework.stereotype.Component;
8 | import org.springframework.transaction.annotation.Transactional;
9 |
10 | import javax.annotation.PostConstruct;
11 | import java.util.ArrayList;
12 | import java.util.List;
13 |
14 | @Component
15 | public class Loaders {
16 |
17 | @Autowired
18 | ElasticsearchOperations operations;
19 |
20 | @Autowired
21 | UsersRepository usersRepository;
22 |
23 | @PostConstruct
24 | @Transactional
25 | public void loadAll(){
26 |
27 | operations.putMapping(Users.class);
28 | System.out.println("Loading Data");
29 | usersRepository.save(getData());
30 | System.out.printf("Loading Completed");
31 |
32 | }
33 |
34 | private List getData() {
35 | List userses = new ArrayList<>();
36 | userses.add(new Users("Ajay",123L, "Accounting", 12000L));
37 | userses.add(new Users("Techie",1230L, "Accounting", 12000L));
38 | userses.add(new Users("Jaga",1234L, "Finance", 22000L));
39 | userses.add(new Users("Shiva",124L, "Tech", 21000L));
40 | userses.add(new Users("Karthick",14L, "Tech", 21000L));
41 | userses.add(new Users("Bhuvanesh",4L, "Accounting", 21000L));
42 | userses.add(new Users("Kumaran",1L, "Tech", 22000L));
43 | userses.add(new Users("Thiru",1235L, "Accounting", 12000L));
44 | return userses;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/model/Users.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic.model;
2 |
3 | import org.springframework.data.elasticsearch.annotations.Document;
4 |
5 | @Document(indexName = "users", type = "users", shards = 1)
6 | public class Users {
7 |
8 | private String name;
9 | private Long id;
10 | private String teamName;
11 | private Long salary;
12 |
13 | public String getName() {
14 | return name;
15 | }
16 |
17 | public void setName(String name) {
18 | this.name = name;
19 | }
20 |
21 | public Long getId() {
22 | return id;
23 | }
24 |
25 | public void setId(Long id) {
26 | this.id = id;
27 | }
28 |
29 | public String getTeamName() {
30 | return teamName;
31 | }
32 |
33 | public void setTeamName(String teamName) {
34 | this.teamName = teamName;
35 | }
36 |
37 | public Long getSalary() {
38 | return salary;
39 | }
40 |
41 | public void setSalary(Long salary) {
42 | this.salary = salary;
43 | }
44 |
45 | public Users(String name, Long id, String teamName, Long salary) {
46 |
47 | this.name = name;
48 | this.id = id;
49 | this.teamName = teamName;
50 | this.salary = salary;
51 | }
52 |
53 | public Users() {
54 |
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/repository/UsersRepository.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic.repository;
2 |
3 | import com.techprimers.elastic.model.Users;
4 | import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
5 |
6 | import java.util.List;
7 |
8 | public interface UsersRepository extends ElasticsearchRepository {
9 | List findByName(String text);
10 |
11 | List findBySalary(Long salary);
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/resource/ManualSearchResource.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic.resource;
2 |
3 | import com.techprimers.elastic.builder.SearchQueryBuilder;
4 | import com.techprimers.elastic.model.Users;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.GetMapping;
7 | import org.springframework.web.bind.annotation.PathVariable;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RestController;
10 |
11 | import java.util.List;
12 |
13 | @RestController
14 | @RequestMapping("/rest/manual/search")
15 | public class ManualSearchResource {
16 |
17 | @Autowired
18 | private SearchQueryBuilder searchQueryBuilder;
19 |
20 | @GetMapping(value = "/{text}")
21 | public List getAll(@PathVariable final String text) {
22 | return searchQueryBuilder.getAll(text);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/techprimers/elastic/resource/SearchResource.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic.resource;
2 |
3 | import com.techprimers.elastic.model.Users;
4 | import com.techprimers.elastic.repository.UsersRepository;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.GetMapping;
7 | import org.springframework.web.bind.annotation.PathVariable;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RestController;
10 |
11 | import java.util.ArrayList;
12 | import java.util.List;
13 |
14 | @RestController
15 | @RequestMapping("/rest/search")
16 | public class SearchResource {
17 |
18 | @Autowired
19 | UsersRepository usersRepository;
20 |
21 | @GetMapping(value = "/name/{text}")
22 | public List searchName(@PathVariable final String text) {
23 | return usersRepository.findByName(text);
24 | }
25 |
26 |
27 | @GetMapping(value = "/salary/{salary}")
28 | public List searchSalary(@PathVariable final Long salary) {
29 | return usersRepository.findBySalary(salary);
30 | }
31 |
32 |
33 | @GetMapping(value = "/all")
34 | public List searchAll() {
35 | List usersList = new ArrayList<>();
36 | Iterable userses = usersRepository.findAll();
37 | userses.forEach(usersList::add);
38 | return usersList;
39 | }
40 |
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TechPrimers/spring-data-elastic-example-2/c9e0e4fcda2b233e4807ae307b8e410ac9683fc3/src/main/resources/application.properties
--------------------------------------------------------------------------------
/src/test/java/com/techprimers/elastic/SpringElasticDemoApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.techprimers.elastic;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.boot.test.context.SpringBootTest;
6 | import org.springframework.test.context.junit4.SpringRunner;
7 |
8 | @RunWith(SpringRunner.class)
9 | @SpringBootTest
10 | public class SpringElasticDemoApplicationTests {
11 |
12 | @Test
13 | public void contextLoads() {
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------