HELP.md | |||||
.gradle | |||||
build/ | |||||
!gradle/wrapper/gradle-wrapper.jar | |||||
!**/src/main/** | |||||
!**/src/test/** | |||||
### STS ### | |||||
.apt_generated | |||||
.classpath | |||||
.factorypath | |||||
.project | |||||
.settings | |||||
.springBeans | |||||
.sts4-cache | |||||
### IntelliJ IDEA ### | |||||
.idea | |||||
*.iws | |||||
*.iml | |||||
*.ipr | |||||
out/ | |||||
### NetBeans ### | |||||
/nbproject/private/ | |||||
/nbbuild/ | |||||
/dist/ | |||||
/nbdist/ | |||||
/.nb-gradle/ | |||||
### VS Code ### | |||||
.vscode/ |
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile | |||||
plugins { | |||||
id("org.springframework.boot") version "2.2.0.BUILD-SNAPSHOT" | |||||
id("io.spring.dependency-management") version "1.0.8.RELEASE" | |||||
kotlin("jvm") version "1.3.50" | |||||
kotlin("plugin.spring") version "1.3.50" | |||||
} | |||||
group = "com.example.elasticsearch" | |||||
version = "0.0.1-SNAPSHOT" | |||||
java.sourceCompatibility = JavaVersion.VERSION_1_8 | |||||
repositories { | |||||
mavenCentral() | |||||
maven { url = uri("https://repo.spring.io/milestone") } | |||||
maven { url = uri("https://repo.spring.io/snapshot") } | |||||
} | |||||
dependencies { | |||||
implementation("org.springframework.boot:spring-boot-starter-data-elasticsearch") | |||||
implementation("org.springframework.boot:spring-boot-starter-web") | |||||
implementation("com.fasterxml.jackson.module:jackson-module-kotlin") | |||||
implementation("org.jetbrains.kotlin:kotlin-reflect") | |||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") | |||||
testImplementation("org.springframework.boot:spring-boot-starter-test") { | |||||
exclude(group = "org.junit.vintage", module = "junit-vintage-engine") | |||||
} | |||||
// implementation("org.elasticsearch:elasticsearch:5.1.2") | |||||
// implementation("org.elasticsearch.client:transport:5.1.2") | |||||
} | |||||
tasks.withType<Test> { | |||||
useJUnitPlatform() | |||||
} | |||||
tasks.withType<KotlinCompile> { | |||||
kotlinOptions { | |||||
freeCompilerArgs = listOf("-Xjsr305=strict") | |||||
jvmTarget = "1.8" | |||||
} | |||||
} |
version: '3.3' | |||||
services: | |||||
# elastic search. | |||||
es: | |||||
image: elasticsearch:7.1.0 | |||||
ports: | |||||
- "9200:9200" | |||||
- "9300:9300" | |||||
volumes: | |||||
- es-data:/usr/share/elasticsearch/data | |||||
- ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml | |||||
environment: | |||||
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" | |||||
volumes: | |||||
es-data: | |||||
driver: local |
#cluster.name: "docker-cluster" | |||||
network.host: 0.0.0.0 | |||||
transport.host: localhost | |||||
transport.tcp.port: 9300 | |||||
# minimum_master_nodes need to be explicitly set when bound on a public IP | |||||
# set to 1 to allow single node clusters | |||||
# Details: https://github.com/elastic/elasticsearch/pull/17288 | |||||
discovery.zen.minimum_master_nodes: 1 | |||||
http.cors.enabled: true | |||||
http.cors.allow-origin : "*" | |||||
http.cors.allow-headers: Authorization |
distributionBase=GRADLE_USER_HOME | |||||
distributionPath=wrapper/dists | |||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-bin.zip | |||||
zipStoreBase=GRADLE_USER_HOME | |||||
zipStorePath=wrapper/dists |
#!/usr/bin/env sh | |||||
# | |||||
# Copyright 2015 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. | |||||
# | |||||
############################################################################## | |||||
## | |||||
## Gradle start up script for UN*X | |||||
## | |||||
############################################################################## | |||||
# Attempt to set APP_HOME | |||||
# Resolve links: $0 may be a link | |||||
PRG="$0" | |||||
# Need this for relative symlinks. | |||||
while [ -h "$PRG" ] ; do | |||||
ls=`ls -ld "$PRG"` | |||||
link=`expr "$ls" : '.*-> \(.*\)$'` | |||||
if expr "$link" : '/.*' > /dev/null; then | |||||
PRG="$link" | |||||
else | |||||
PRG=`dirname "$PRG"`"/$link" | |||||
fi | |||||
done | |||||
SAVED="`pwd`" | |||||
cd "`dirname \"$PRG\"`/" >/dev/null | |||||
APP_HOME="`pwd -P`" | |||||
cd "$SAVED" >/dev/null | |||||
APP_NAME="Gradle" | |||||
APP_BASE_NAME=`basename "$0"` | |||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | |||||
# Use the maximum available, or set MAX_FD != -1 to use that value. | |||||
MAX_FD="maximum" | |||||
warn () { | |||||
echo "$*" | |||||
} | |||||
die () { | |||||
echo | |||||
echo "$*" | |||||
echo | |||||
exit 1 | |||||
} | |||||
# OS specific support (must be 'true' or 'false'). | |||||
cygwin=false | |||||
msys=false | |||||
darwin=false | |||||
nonstop=false | |||||
case "`uname`" in | |||||
CYGWIN* ) | |||||
cygwin=true | |||||
;; | |||||
Darwin* ) | |||||
darwin=true | |||||
;; | |||||
MINGW* ) | |||||
msys=true | |||||
;; | |||||
NONSTOP* ) | |||||
nonstop=true | |||||
;; | |||||
esac | |||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |||||
# Determine the Java command to use to start the JVM. | |||||
if [ -n "$JAVA_HOME" ] ; then | |||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |||||
# IBM's JDK on AIX uses strange locations for the executables | |||||
JAVACMD="$JAVA_HOME/jre/sh/java" | |||||
else | |||||
JAVACMD="$JAVA_HOME/bin/java" | |||||
fi | |||||
if [ ! -x "$JAVACMD" ] ; then | |||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |||||
Please set the JAVA_HOME variable in your environment to match the | |||||
location of your Java installation." | |||||
fi | |||||
else | |||||
JAVACMD="java" | |||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||||
Please set the JAVA_HOME variable in your environment to match the | |||||
location of your Java installation." | |||||
fi | |||||
# Increase the maximum file descriptors if we can. | |||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | |||||
MAX_FD_LIMIT=`ulimit -H -n` | |||||
if [ $? -eq 0 ] ; then | |||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | |||||
MAX_FD="$MAX_FD_LIMIT" | |||||
fi | |||||
ulimit -n $MAX_FD | |||||
if [ $? -ne 0 ] ; then | |||||
warn "Could not set maximum file descriptor limit: $MAX_FD" | |||||
fi | |||||
else | |||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | |||||
fi | |||||
fi | |||||
# For Darwin, add options to specify how the application appears in the dock | |||||
if $darwin; then | |||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | |||||
fi | |||||
# For Cygwin or MSYS, switch paths to Windows format before running java | |||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then | |||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"` | |||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | |||||
JAVACMD=`cygpath --unix "$JAVACMD"` | |||||
# We build the pattern for arguments to be converted via cygpath | |||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | |||||
SEP="" | |||||
for dir in $ROOTDIRSRAW ; do | |||||
ROOTDIRS="$ROOTDIRS$SEP$dir" | |||||
SEP="|" | |||||
done | |||||
OURCYGPATTERN="(^($ROOTDIRS))" | |||||
# Add a user-defined pattern to the cygpath arguments | |||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then | |||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | |||||
fi | |||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh | |||||
i=0 | |||||
for arg in "$@" ; do | |||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | |||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | |||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | |||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | |||||
else | |||||
eval `echo args$i`="\"$arg\"" | |||||
fi | |||||
i=$((i+1)) | |||||
done | |||||
case $i in | |||||
(0) set -- ;; | |||||
(1) set -- "$args0" ;; | |||||
(2) set -- "$args0" "$args1" ;; | |||||
(3) set -- "$args0" "$args1" "$args2" ;; | |||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; | |||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | |||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | |||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | |||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | |||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | |||||
esac | |||||
fi | |||||
# Escape application args | |||||
save () { | |||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | |||||
echo " " | |||||
} | |||||
APP_ARGS=$(save "$@") | |||||
# Collect all arguments for the java command, following the shell quoting and substitution rules | |||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | |||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | |||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | |||||
cd "$(dirname "$0")" | |||||
fi | |||||
exec "$JAVACMD" "$@" |
@rem | |||||
@rem Copyright 2015 the original author or authors. | |||||
@rem | |||||
@rem Licensed under the Apache License, Version 2.0 (the "License"); | |||||
@rem you may not use this file except in compliance with the License. | |||||
@rem You may obtain a copy of the License at | |||||
@rem | |||||
@rem https://www.apache.org/licenses/LICENSE-2.0 | |||||
@rem | |||||
@rem Unless required by applicable law or agreed to in writing, software | |||||
@rem distributed under the License is distributed on an "AS IS" BASIS, | |||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
@rem See the License for the specific language governing permissions and | |||||
@rem limitations under the License. | |||||
@rem | |||||
@if "%DEBUG%" == "" @echo off | |||||
@rem ########################################################################## | |||||
@rem | |||||
@rem Gradle startup script for Windows | |||||
@rem | |||||
@rem ########################################################################## | |||||
@rem Set local scope for the variables with windows NT shell | |||||
if "%OS%"=="Windows_NT" setlocal | |||||
set DIRNAME=%~dp0 | |||||
if "%DIRNAME%" == "" set DIRNAME=. | |||||
set APP_BASE_NAME=%~n0 | |||||
set APP_HOME=%DIRNAME% | |||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | |||||
@rem Find java.exe | |||||
if defined JAVA_HOME goto findJavaFromJavaHome | |||||
set JAVA_EXE=java.exe | |||||
%JAVA_EXE% -version >NUL 2>&1 | |||||
if "%ERRORLEVEL%" == "0" goto init | |||||
echo. | |||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||||
echo. | |||||
echo Please set the JAVA_HOME variable in your environment to match the | |||||
echo location of your Java installation. | |||||
goto fail | |||||
:findJavaFromJavaHome | |||||
set JAVA_HOME=%JAVA_HOME:"=% | |||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |||||
if exist "%JAVA_EXE%" goto init | |||||
echo. | |||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | |||||
echo. | |||||
echo Please set the JAVA_HOME variable in your environment to match the | |||||
echo location of your Java installation. | |||||
goto fail | |||||
:init | |||||
@rem Get command-line arguments, handling Windows variants | |||||
if not "%OS%" == "Windows_NT" goto win9xME_args | |||||
:win9xME_args | |||||
@rem Slurp the command line arguments. | |||||
set CMD_LINE_ARGS= | |||||
set _SKIP=2 | |||||
:win9xME_args_slurp | |||||
if "x%~1" == "x" goto execute | |||||
set CMD_LINE_ARGS=%* | |||||
:execute | |||||
@rem Setup the command line | |||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |||||
@rem Execute Gradle | |||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | |||||
:end | |||||
@rem End local scope for the variables with windows NT shell | |||||
if "%ERRORLEVEL%"=="0" goto mainEnd | |||||
:fail | |||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |||||
rem the _cmd.exe /c_ return code! | |||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | |||||
exit /b 1 | |||||
:mainEnd | |||||
if "%OS%"=="Windows_NT" endlocal | |||||
:omega |
pluginManagement { | |||||
repositories { | |||||
maven { url = uri("https://repo.spring.io/milestone") } | |||||
maven { url = uri("https://repo.spring.io/snapshot") } | |||||
gradlePluginPortal() | |||||
} | |||||
resolutionStrategy { | |||||
eachPlugin { | |||||
if (requested.id.id == "org.springframework.boot") { | |||||
useModule("org.springframework.boot:spring-boot-gradle-plugin:${requested.version}") | |||||
} | |||||
} | |||||
} | |||||
} | |||||
rootProject.name = "elasticsearchdemo" |
package com.example.elasticsearch.elasticsearchdemo | |||||
import org.springframework.boot.autoconfigure.SpringBootApplication | |||||
import org.springframework.boot.runApplication | |||||
@SpringBootApplication | |||||
class ElasticsearchdemoApplication | |||||
fun main(args: Array<String>) { | |||||
runApplication<ElasticsearchdemoApplication>(*args) | |||||
} |
package com.example.elasticsearch.elasticsearchdemo.controller | |||||
import com.example.elasticsearch.elasticsearchdemo.model.Bank | |||||
import com.fasterxml.jackson.module.kotlin.isKotlinClass | |||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper | |||||
import java.net.InetAddress | |||||
import org.springframework.stereotype.Controller | |||||
import org.springframework.ui.Model | |||||
import org.elasticsearch.common.transport.TransportAddress | |||||
import org.elasticsearch.client.transport.TransportClient | |||||
import org.elasticsearch.transport.client.PreBuiltTransportClient | |||||
import org.elasticsearch.common.settings.Settings | |||||
import org.elasticsearch.action.search.SearchResponse | |||||
import org.elasticsearch.action.search.SearchType | |||||
import org.elasticsearch.client.RestClient | |||||
import org.elasticsearch.client.RestHighLevelClient | |||||
import org.elasticsearch.index.query.QueryBuilders | |||||
import org.elasticsearch.search.SearchHits | |||||
import org.elasticsearch.search.aggregations.AggregationBuilders | |||||
import org.springframework.beans.factory.annotation.Autowired | |||||
import org.springframework.data.elasticsearch.client.ClientConfiguration | |||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations | |||||
import org.springframework.data.elasticsearch.core.query.GetQuery | |||||
import org.springframework.web.bind.annotation.* | |||||
import kotlin.reflect.jvm.internal.impl.metadata.ProtoBuf | |||||
@RestController | |||||
@RequestMapping("v1") | |||||
class APIController { | |||||
@GetMapping("hello") | |||||
fun hello(): String{ | |||||
return """ | |||||
"{"result":"Hello world" }" | |||||
""" | |||||
} | |||||
@GetMapping("/search/{keyword}") | |||||
fun index(@PathVariable("keyword")keyword: String): SearchResponse { | |||||
val settings: Settings = Settings.builder().put("cluster.name","docker-cluster").build() | |||||
val client:TransportClient = PreBuiltTransportClient(Settings.EMPTY) | |||||
.addTransportAddress(TransportAddress(InetAddress.getByName("localhost"), 9300)) | |||||
val response:SearchResponse = client.prepareSearch("bank") | |||||
.setSearchType(SearchType.QUERY_THEN_FETCH) | |||||
.setQuery( | |||||
QueryBuilders.boolQuery() | |||||
.should(QueryBuilders.termQuery("account_number", keyword)) | |||||
.should(QueryBuilders.termQuery("address",keyword)) | |||||
.should(QueryBuilders.termQuery("age",keyword)) | |||||
.should(QueryBuilders.termQuery("balance",keyword)) | |||||
.should(QueryBuilders.termQuery("city",keyword)) | |||||
.should(QueryBuilders.termQuery("email",keyword)) | |||||
.should(QueryBuilders.termQuery("employer",keyword)) | |||||
.should(QueryBuilders.termQuery("firstname",keyword)) | |||||
.should(QueryBuilders.termQuery("gender",keyword)) | |||||
.should(QueryBuilders.termQuery("lastname",keyword)) | |||||
.should(QueryBuilders.termQuery("state",keyword)) | |||||
) | |||||
.setFrom(0).setSize(10).setExplain(true) | |||||
.get() | |||||
println(response.hits) | |||||
println(response.hits.hits) | |||||
return response | |||||
} | |||||
} |
package com.example.elasticsearch.elasticsearchdemo.model | |||||
import org.springframework.data.elasticsearch.annotations.Document | |||||
data class Bank ( | |||||
val accountNumber: Long | |||||
,val balance: Long | |||||
,val firstName: String | |||||
,val lastName: String | |||||
,val age: Int | |||||
,val gender: String | |||||
,val address: String | |||||
,val employer: String | |||||
,val email: String | |||||
,val city: String | |||||
,val state: String | |||||
) |
spring: | |||||
data: | |||||
elasticsearch: | |||||
cluster-name: docker-cluster | |||||
network.host: 0.0.0.0 | |||||
transport.host: localhost | |||||
transport.tcp.port: 9300 | |||||
package com.example.elasticsearch.elasticsearchdemo | |||||
import org.junit.jupiter.api.Test | |||||
import org.springframework.boot.test.context.SpringBootTest | |||||
@SpringBootTest | |||||
class ElasticsearchdemoApplicationTests { | |||||
@Test | |||||
fun contextLoads() { | |||||
} | |||||
} |