Showing
14 changed files
with
790 additions
and
0 deletions
README.md
0 → 100644
1 | +### 오픈 소스와 자연어 처리를 이용한 검색 쿼리 개선 | ||
2 | + | ||
3 | +> 주제 | ||
4 | + | ||
5 | +검색 엔진 오픈 소스인 Elasticsearch 와 | ||
6 | +자연어 처리 사전 학습 모델인 BERT 를 이용 하여 | ||
7 | +검색 쿼리를 개선 하는 방법에 대해 연구 한다. | ||
8 | + | ||
9 | +> 사용된 기술 | ||
10 | + | ||
11 | +- Elasticsearch | ||
12 | +- BERT | ||
13 | +- Spring Boot | ||
14 | + | ||
15 | + | ||
16 | +> 상세 목표 | ||
17 | + | ||
18 | +- Elasticsearch 에서 제공 하는 기본 자동 완성 기능 개선 | ||
19 | +- 자연어 처리 모델인 BERT 를 통해 질문형 검색 쿼리 개발 | ||
20 | +- Spring Boot 를 이용해 Elasticsearch 와 연동 하여 웹 검색 사이트 개발 | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
mvnw
0 → 100644
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 | +# https://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 | +# Maven 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 | + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home | ||
58 | + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html | ||
59 | + if [ -z "$JAVA_HOME" ]; then | ||
60 | + if [ -x "/usr/libexec/java_home" ]; then | ||
61 | + export JAVA_HOME="`/usr/libexec/java_home`" | ||
62 | + else | ||
63 | + export JAVA_HOME="/Library/Java/Home" | ||
64 | + fi | ||
65 | + fi | ||
66 | + ;; | ||
67 | +esac | ||
68 | + | ||
69 | +if [ -z "$JAVA_HOME" ] ; then | ||
70 | + if [ -r /etc/gentoo-release ] ; then | ||
71 | + JAVA_HOME=`java-config --jre-home` | ||
72 | + fi | ||
73 | +fi | ||
74 | + | ||
75 | +if [ -z "$M2_HOME" ] ; then | ||
76 | + ## resolve links - $0 may be a link to maven's home | ||
77 | + PRG="$0" | ||
78 | + | ||
79 | + # need this for relative symlinks | ||
80 | + while [ -h "$PRG" ] ; do | ||
81 | + ls=`ls -ld "$PRG"` | ||
82 | + link=`expr "$ls" : '.*-> \(.*\)$'` | ||
83 | + if expr "$link" : '/.*' > /dev/null; then | ||
84 | + PRG="$link" | ||
85 | + else | ||
86 | + PRG="`dirname "$PRG"`/$link" | ||
87 | + fi | ||
88 | + done | ||
89 | + | ||
90 | + saveddir=`pwd` | ||
91 | + | ||
92 | + M2_HOME=`dirname "$PRG"`/.. | ||
93 | + | ||
94 | + # make it fully qualified | ||
95 | + M2_HOME=`cd "$M2_HOME" && pwd` | ||
96 | + | ||
97 | + cd "$saveddir" | ||
98 | + # echo Using m2 at $M2_HOME | ||
99 | +fi | ||
100 | + | ||
101 | +# For Cygwin, ensure paths are in UNIX format before anything is touched | ||
102 | +if $cygwin ; then | ||
103 | + [ -n "$M2_HOME" ] && | ||
104 | + M2_HOME=`cygpath --unix "$M2_HOME"` | ||
105 | + [ -n "$JAVA_HOME" ] && | ||
106 | + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` | ||
107 | + [ -n "$CLASSPATH" ] && | ||
108 | + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` | ||
109 | +fi | ||
110 | + | ||
111 | +# For Mingw, ensure paths are in UNIX format before anything is touched | ||
112 | +if $mingw ; then | ||
113 | + [ -n "$M2_HOME" ] && | ||
114 | + M2_HOME="`(cd "$M2_HOME"; pwd)`" | ||
115 | + [ -n "$JAVA_HOME" ] && | ||
116 | + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" | ||
117 | +fi | ||
118 | + | ||
119 | +if [ -z "$JAVA_HOME" ]; then | ||
120 | + javaExecutable="`which javac`" | ||
121 | + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then | ||
122 | + # readlink(1) is not available as standard on Solaris 10. | ||
123 | + readLink=`which readlink` | ||
124 | + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then | ||
125 | + if $darwin ; then | ||
126 | + javaHome="`dirname \"$javaExecutable\"`" | ||
127 | + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" | ||
128 | + else | ||
129 | + javaExecutable="`readlink -f \"$javaExecutable\"`" | ||
130 | + fi | ||
131 | + javaHome="`dirname \"$javaExecutable\"`" | ||
132 | + javaHome=`expr "$javaHome" : '\(.*\)/bin'` | ||
133 | + JAVA_HOME="$javaHome" | ||
134 | + export JAVA_HOME | ||
135 | + fi | ||
136 | + fi | ||
137 | +fi | ||
138 | + | ||
139 | +if [ -z "$JAVACMD" ] ; then | ||
140 | + if [ -n "$JAVA_HOME" ] ; then | ||
141 | + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
142 | + # IBM's JDK on AIX uses strange locations for the executables | ||
143 | + JAVACMD="$JAVA_HOME/jre/sh/java" | ||
144 | + else | ||
145 | + JAVACMD="$JAVA_HOME/bin/java" | ||
146 | + fi | ||
147 | + else | ||
148 | + JAVACMD="`which java`" | ||
149 | + fi | ||
150 | +fi | ||
151 | + | ||
152 | +if [ ! -x "$JAVACMD" ] ; then | ||
153 | + echo "Error: JAVA_HOME is not defined correctly." >&2 | ||
154 | + echo " We cannot execute $JAVACMD" >&2 | ||
155 | + exit 1 | ||
156 | +fi | ||
157 | + | ||
158 | +if [ -z "$JAVA_HOME" ] ; then | ||
159 | + echo "Warning: JAVA_HOME environment variable is not set." | ||
160 | +fi | ||
161 | + | ||
162 | +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher | ||
163 | + | ||
164 | +# traverses directory structure from process work directory to filesystem root | ||
165 | +# first directory with .mvn subdirectory is considered project base directory | ||
166 | +find_maven_basedir() { | ||
167 | + | ||
168 | + if [ -z "$1" ] | ||
169 | + then | ||
170 | + echo "Path not specified to find_maven_basedir" | ||
171 | + return 1 | ||
172 | + fi | ||
173 | + | ||
174 | + basedir="$1" | ||
175 | + wdir="$1" | ||
176 | + while [ "$wdir" != '/' ] ; do | ||
177 | + if [ -d "$wdir"/.mvn ] ; then | ||
178 | + basedir=$wdir | ||
179 | + break | ||
180 | + fi | ||
181 | + # workaround for JBEAP-8937 (on Solaris 10/Sparc) | ||
182 | + if [ -d "${wdir}" ]; then | ||
183 | + wdir=`cd "$wdir/.."; pwd` | ||
184 | + fi | ||
185 | + # end of workaround | ||
186 | + done | ||
187 | + echo "${basedir}" | ||
188 | +} | ||
189 | + | ||
190 | +# concatenates all lines of a file | ||
191 | +concat_lines() { | ||
192 | + if [ -f "$1" ]; then | ||
193 | + echo "$(tr -s '\n' ' ' < "$1")" | ||
194 | + fi | ||
195 | +} | ||
196 | + | ||
197 | +BASE_DIR=`find_maven_basedir "$(pwd)"` | ||
198 | +if [ -z "$BASE_DIR" ]; then | ||
199 | + exit 1; | ||
200 | +fi | ||
201 | + | ||
202 | +########################################################################################## | ||
203 | +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central | ||
204 | +# This allows using the maven wrapper in projects that prohibit checking in binary data. | ||
205 | +########################################################################################## | ||
206 | +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then | ||
207 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
208 | + echo "Found .mvn/wrapper/maven-wrapper.jar" | ||
209 | + fi | ||
210 | +else | ||
211 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
212 | + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." | ||
213 | + fi | ||
214 | + if [ -n "$MVNW_REPOURL" ]; then | ||
215 | + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" | ||
216 | + else | ||
217 | + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" | ||
218 | + fi | ||
219 | + while IFS="=" read key value; do | ||
220 | + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; | ||
221 | + esac | ||
222 | + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" | ||
223 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
224 | + echo "Downloading from: $jarUrl" | ||
225 | + fi | ||
226 | + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" | ||
227 | + if $cygwin; then | ||
228 | + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` | ||
229 | + fi | ||
230 | + | ||
231 | + if command -v wget > /dev/null; then | ||
232 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
233 | + echo "Found wget ... using wget" | ||
234 | + fi | ||
235 | + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then | ||
236 | + wget "$jarUrl" -O "$wrapperJarPath" | ||
237 | + else | ||
238 | + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" | ||
239 | + fi | ||
240 | + elif command -v curl > /dev/null; then | ||
241 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
242 | + echo "Found curl ... using curl" | ||
243 | + fi | ||
244 | + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then | ||
245 | + curl -o "$wrapperJarPath" "$jarUrl" -f | ||
246 | + else | ||
247 | + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f | ||
248 | + fi | ||
249 | + | ||
250 | + else | ||
251 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
252 | + echo "Falling back to using Java to download" | ||
253 | + fi | ||
254 | + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" | ||
255 | + # For Cygwin, switch paths to Windows format before running javac | ||
256 | + if $cygwin; then | ||
257 | + javaClass=`cygpath --path --windows "$javaClass"` | ||
258 | + fi | ||
259 | + if [ -e "$javaClass" ]; then | ||
260 | + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then | ||
261 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
262 | + echo " - Compiling MavenWrapperDownloader.java ..." | ||
263 | + fi | ||
264 | + # Compiling the Java class | ||
265 | + ("$JAVA_HOME/bin/javac" "$javaClass") | ||
266 | + fi | ||
267 | + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then | ||
268 | + # Running the downloader | ||
269 | + if [ "$MVNW_VERBOSE" = true ]; then | ||
270 | + echo " - Running MavenWrapperDownloader.java ..." | ||
271 | + fi | ||
272 | + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") | ||
273 | + fi | ||
274 | + fi | ||
275 | + fi | ||
276 | +fi | ||
277 | +########################################################################################## | ||
278 | +# End of extension | ||
279 | +########################################################################################## | ||
280 | + | ||
281 | +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} | ||
282 | +if [ "$MVNW_VERBOSE" = true ]; then | ||
283 | + echo $MAVEN_PROJECTBASEDIR | ||
284 | +fi | ||
285 | +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" | ||
286 | + | ||
287 | +# For Cygwin, switch paths to Windows format before running java | ||
288 | +if $cygwin; then | ||
289 | + [ -n "$M2_HOME" ] && | ||
290 | + M2_HOME=`cygpath --path --windows "$M2_HOME"` | ||
291 | + [ -n "$JAVA_HOME" ] && | ||
292 | + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` | ||
293 | + [ -n "$CLASSPATH" ] && | ||
294 | + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` | ||
295 | + [ -n "$MAVEN_PROJECTBASEDIR" ] && | ||
296 | + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` | ||
297 | +fi | ||
298 | + | ||
299 | +# Provide a "standardized" way to retrieve the CLI args that will | ||
300 | +# work with both Windows and non-Windows executions. | ||
301 | +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" | ||
302 | +export MAVEN_CMD_LINE_ARGS | ||
303 | + | ||
304 | +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain | ||
305 | + | ||
306 | +exec "$JAVACMD" \ | ||
307 | + $MAVEN_OPTS \ | ||
308 | + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ | ||
309 | + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ | ||
310 | + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" |
mvnw.cmd
0 → 100644
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 https://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 Maven 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 keystroke 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 set title of command window | ||
39 | +title %0 | ||
40 | +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' | ||
41 | +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% | ||
42 | + | ||
43 | +@REM set %HOME% to equivalent of $HOME | ||
44 | +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") | ||
45 | + | ||
46 | +@REM Execute a user defined script before this one | ||
47 | +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre | ||
48 | +@REM check for pre script, once with legacy .bat ending and once with .cmd ending | ||
49 | +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" | ||
50 | +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" | ||
51 | +:skipRcPre | ||
52 | + | ||
53 | +@setlocal | ||
54 | + | ||
55 | +set ERROR_CODE=0 | ||
56 | + | ||
57 | +@REM To isolate internal variables from possible post scripts, we use another setlocal | ||
58 | +@setlocal | ||
59 | + | ||
60 | +@REM ==== START VALIDATION ==== | ||
61 | +if not "%JAVA_HOME%" == "" goto OkJHome | ||
62 | + | ||
63 | +echo. | ||
64 | +echo Error: JAVA_HOME not found in your environment. >&2 | ||
65 | +echo Please set the JAVA_HOME variable in your environment to match the >&2 | ||
66 | +echo location of your Java installation. >&2 | ||
67 | +echo. | ||
68 | +goto error | ||
69 | + | ||
70 | +:OkJHome | ||
71 | +if exist "%JAVA_HOME%\bin\java.exe" goto init | ||
72 | + | ||
73 | +echo. | ||
74 | +echo Error: JAVA_HOME is set to an invalid directory. >&2 | ||
75 | +echo JAVA_HOME = "%JAVA_HOME%" >&2 | ||
76 | +echo Please set the JAVA_HOME variable in your environment to match the >&2 | ||
77 | +echo location of your Java installation. >&2 | ||
78 | +echo. | ||
79 | +goto error | ||
80 | + | ||
81 | +@REM ==== END VALIDATION ==== | ||
82 | + | ||
83 | +:init | ||
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 | +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" | ||
121 | +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain | ||
122 | + | ||
123 | +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" | ||
124 | + | ||
125 | +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( | ||
126 | + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B | ||
127 | +) | ||
128 | + | ||
129 | +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central | ||
130 | +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. | ||
131 | +if exist %WRAPPER_JAR% ( | ||
132 | + if "%MVNW_VERBOSE%" == "true" ( | ||
133 | + echo Found %WRAPPER_JAR% | ||
134 | + ) | ||
135 | +) else ( | ||
136 | + if not "%MVNW_REPOURL%" == "" ( | ||
137 | + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" | ||
138 | + ) | ||
139 | + if "%MVNW_VERBOSE%" == "true" ( | ||
140 | + echo Couldn't find %WRAPPER_JAR%, downloading it ... | ||
141 | + echo Downloading from: %DOWNLOAD_URL% | ||
142 | + ) | ||
143 | + | ||
144 | + powershell -Command "&{"^ | ||
145 | + "$webclient = new-object System.Net.WebClient;"^ | ||
146 | + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ | ||
147 | + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ | ||
148 | + "}"^ | ||
149 | + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ | ||
150 | + "}" | ||
151 | + if "%MVNW_VERBOSE%" == "true" ( | ||
152 | + echo Finished downloading %WRAPPER_JAR% | ||
153 | + ) | ||
154 | +) | ||
155 | +@REM End of extension | ||
156 | + | ||
157 | +@REM Provide a "standardized" way to retrieve the CLI args that will | ||
158 | +@REM work with both Windows and non-Windows executions. | ||
159 | +set MAVEN_CMD_LINE_ARGS=%* | ||
160 | + | ||
161 | +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* | ||
162 | +if ERRORLEVEL 1 goto error | ||
163 | +goto end | ||
164 | + | ||
165 | +:error | ||
166 | +set ERROR_CODE=1 | ||
167 | + | ||
168 | +:end | ||
169 | +@endlocal & set ERROR_CODE=%ERROR_CODE% | ||
170 | + | ||
171 | +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost | ||
172 | +@REM check for post script, once with legacy .bat ending and once with .cmd ending | ||
173 | +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" | ||
174 | +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" | ||
175 | +:skipRcPost | ||
176 | + | ||
177 | +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' | ||
178 | +if "%MAVEN_BATCH_PAUSE%" == "on" pause | ||
179 | + | ||
180 | +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% | ||
181 | + | ||
182 | +exit /B %ERROR_CODE% |
pom.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
4 | + <modelVersion>4.0.0</modelVersion> | ||
5 | + <parent> | ||
6 | + <groupId>org.springframework.boot</groupId> | ||
7 | + <artifactId>spring-boot-starter-parent</artifactId> | ||
8 | + <version>2.4.4</version> | ||
9 | + <relativePath/> <!-- lookup parent from repository --> | ||
10 | + </parent> | ||
11 | + <groupId>com.esboot</groupId> | ||
12 | + <artifactId>bert-search</artifactId> | ||
13 | + <version>0.0.1-SNAPSHOT</version> | ||
14 | + <name>bert-searcher</name> | ||
15 | + <description>Search Program with elasticsearch, spring boot and BERT</description> | ||
16 | + <properties> | ||
17 | + <java.version>11</java.version> | ||
18 | + </properties> | ||
19 | + <dependencies> | ||
20 | + <dependency> | ||
21 | + <groupId>org.springframework.boot</groupId> | ||
22 | + <artifactId>spring-boot-starter-data-elasticsearch</artifactId> | ||
23 | + </dependency> | ||
24 | + <dependency> | ||
25 | + <groupId>org.springframework.boot</groupId> | ||
26 | + <artifactId>spring-boot-starter-thymeleaf</artifactId> | ||
27 | + </dependency> | ||
28 | + <dependency> | ||
29 | + <groupId>org.springframework.boot</groupId> | ||
30 | + <artifactId>spring-boot-starter-web</artifactId> | ||
31 | + </dependency> | ||
32 | + | ||
33 | + <dependency> | ||
34 | + <groupId>org.springframework.boot</groupId> | ||
35 | + <artifactId>spring-boot-devtools</artifactId> | ||
36 | + <scope>runtime</scope> | ||
37 | + <optional>true</optional> | ||
38 | + </dependency> | ||
39 | + <dependency> | ||
40 | + <groupId>org.projectlombok</groupId> | ||
41 | + <artifactId>lombok</artifactId> | ||
42 | + <optional>true</optional> | ||
43 | + </dependency> | ||
44 | + <dependency> | ||
45 | + <groupId>org.springframework.boot</groupId> | ||
46 | + <artifactId>spring-boot-starter-test</artifactId> | ||
47 | + <scope>test</scope> | ||
48 | + </dependency> | ||
49 | + </dependencies> | ||
50 | + | ||
51 | + <build> | ||
52 | + <plugins> | ||
53 | + <plugin> | ||
54 | + <groupId>org.springframework.boot</groupId> | ||
55 | + <artifactId>spring-boot-maven-plugin</artifactId> | ||
56 | + <configuration> | ||
57 | + <excludes> | ||
58 | + <exclude> | ||
59 | + <groupId>org.projectlombok</groupId> | ||
60 | + <artifactId>lombok</artifactId> | ||
61 | + </exclude> | ||
62 | + </excludes> | ||
63 | + </configuration> | ||
64 | + </plugin> | ||
65 | + </plugins> | ||
66 | + </build> | ||
67 | + | ||
68 | +</project> |
1 | +package com.esboot.bertsearch; | ||
2 | + | ||
3 | +import org.springframework.boot.SpringApplication; | ||
4 | +import org.springframework.boot.autoconfigure.SpringBootApplication; | ||
5 | + | ||
6 | +@SpringBootApplication | ||
7 | +public class BertSearcherApplication { | ||
8 | + | ||
9 | + public static void main(String[] args) { | ||
10 | + SpringApplication.run(BertSearcherApplication.class, args); | ||
11 | + } | ||
12 | + | ||
13 | +} |
1 | +package com.esboot.bertsearch.config; | ||
2 | + | ||
3 | +import org.elasticsearch.client.RestHighLevelClient; | ||
4 | +import org.springframework.context.annotation.Bean; | ||
5 | +import org.springframework.context.annotation.Configuration; | ||
6 | +import org.springframework.data.elasticsearch.client.ClientConfiguration; | ||
7 | +import org.springframework.data.elasticsearch.client.RestClients; | ||
8 | +import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; | ||
9 | + | ||
10 | +@Configuration | ||
11 | +public class RestClientConfig extends AbstractElasticsearchConfiguration { | ||
12 | + | ||
13 | + @Override | ||
14 | + @Bean | ||
15 | + public RestHighLevelClient elasticsearchClient() { | ||
16 | + ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo("localhost:9200").build(); | ||
17 | + | ||
18 | + return RestClients.create(clientConfiguration).rest(); | ||
19 | + } | ||
20 | +} |
1 | +package com.esboot.bertsearch.controller; | ||
2 | + | ||
3 | +import org.springframework.stereotype.Controller; | ||
4 | +import org.springframework.web.bind.annotation.GetMapping; | ||
5 | + | ||
6 | +@Controller | ||
7 | +public class HomeController { | ||
8 | + | ||
9 | + @GetMapping("/home") | ||
10 | + public String showHome() { | ||
11 | + return "home-page"; | ||
12 | + } | ||
13 | +} |
1 | +package com.esboot.bertsearch.controller; | ||
2 | + | ||
3 | +import com.esboot.bertsearch.dto.Phone; | ||
4 | +import com.esboot.bertsearch.repository.PhoneRepository; | ||
5 | +import org.elasticsearch.search.aggregations.metrics.InternalHDRPercentiles; | ||
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 | +@RestController | ||
12 | +@RequestMapping("/api") | ||
13 | +public class TestController { | ||
14 | + | ||
15 | + private final PhoneRepository phoneRepository; | ||
16 | + | ||
17 | + public TestController(PhoneRepository phoneRepository) { | ||
18 | + this.phoneRepository = phoneRepository; | ||
19 | + } | ||
20 | + | ||
21 | + @GetMapping("/phones") | ||
22 | + public Iterable<Phone> findAllPhones() { | ||
23 | + return phoneRepository.findAll(); | ||
24 | + } | ||
25 | + | ||
26 | + @GetMapping("/phones/{model}") | ||
27 | + public Iterable<Phone> findByModel(@PathVariable String model) { | ||
28 | + return phoneRepository.findByModel(model); | ||
29 | + } | ||
30 | +} |
1 | +package com.esboot.bertsearch.dto; | ||
2 | + | ||
3 | +import lombok.AllArgsConstructor; | ||
4 | +import lombok.Data; | ||
5 | +import lombok.NoArgsConstructor; | ||
6 | +import org.springframework.data.annotation.Id; | ||
7 | +import org.springframework.data.elasticsearch.annotations.Document; | ||
8 | +import org.springframework.data.elasticsearch.annotations.Field; | ||
9 | +import org.springframework.data.elasticsearch.annotations.FieldType; | ||
10 | + | ||
11 | +@Data | ||
12 | +@NoArgsConstructor | ||
13 | +@AllArgsConstructor | ||
14 | +@Document(indexName = "phones") | ||
15 | +public class Phone { | ||
16 | + | ||
17 | + @Id | ||
18 | + private String id; | ||
19 | + | ||
20 | + @Field(name = "model", type = FieldType.Text) | ||
21 | + private String model; | ||
22 | + | ||
23 | + @Field(name = "price", type = FieldType.Integer) | ||
24 | + private int price; | ||
25 | + | ||
26 | + @Field(name = "date", type = FieldType.Text) | ||
27 | + private String date; | ||
28 | +} |
1 | +package com.esboot.bertsearch.repository; | ||
2 | + | ||
3 | +import com.esboot.bertsearch.dto.Phone; | ||
4 | +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; | ||
5 | + | ||
6 | +public interface PhoneRepository extends ElasticsearchRepository<Phone, String> { // DTO, PK | ||
7 | + Iterable<Phone> findByModel(String model); | ||
8 | +} |
src/main/resources/static/css/home.css
0 → 100644
1 | +body { | ||
2 | + background: black; | ||
3 | +} | ||
4 | +.container { | ||
5 | + width: 60%; | ||
6 | + margin: 10px auto; | ||
7 | + background: #333; | ||
8 | + border-radius: 6px; | ||
9 | + overflow: hidden; | ||
10 | + box-shadow: 0 0 4px rgba(0, 0, 0, 0.4), 0 4px 4px rgba(0, 0, 0, 0.2); | ||
11 | +} | ||
12 | +.container input { | ||
13 | + text-align: center; | ||
14 | + width: 100%; | ||
15 | + background: transparent; | ||
16 | + border: 0; | ||
17 | + font-size: 30px; | ||
18 | + color: #fff; | ||
19 | +} | ||
20 | +.suggestions { | ||
21 | + border-top: 2px solid #999; | ||
22 | +} | ||
23 | +.suggestions > div { | ||
24 | + padding: 15px; | ||
25 | + font-size: 20px; | ||
26 | + color: #fff; | ||
27 | + border-top: 1px solid #666; | ||
28 | + cursor: pointer; | ||
29 | +} | ||
30 | +.suggestions > div:hover { | ||
31 | + background-color: #1e4dd4; | ||
32 | +} | ||
33 | +.emphy { | ||
34 | + width: 50%; | ||
35 | + margin: 40px auto; | ||
36 | + text-align: center; | ||
37 | + color: #fff; | ||
38 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/main/resources/static/js/main.js
0 → 100644
1 | +const countries = [ | ||
2 | + {name: 'USA'}, | ||
3 | + {name: 'India'}, | ||
4 | + {name: 'Argentina'}, | ||
5 | + {name: 'Armenia'}, | ||
6 | + {name: "korea"}, | ||
7 | + {name: "lorem ipsum test filter"} | ||
8 | +]; | ||
9 | + | ||
10 | +const searchInput = document.querySelector('.search-input'); | ||
11 | +const suggestionsPanel = document.querySelector('.suggestions'); | ||
12 | + | ||
13 | +searchInput.addEventListener('keyup', function() { | ||
14 | + const input = searchInput.value; | ||
15 | + suggestionsPanel.innerHTML = ''; | ||
16 | + const suggestions = countries.filter(function(country) { | ||
17 | + return country.name.toLowerCase().startsWith(input); | ||
18 | + }); | ||
19 | + suggestions.forEach(function(suggested) { | ||
20 | + const div = document.createElement('div'); | ||
21 | + div.innerHTML = suggested.name; | ||
22 | + suggestionsPanel.appendChild(div); | ||
23 | + }); | ||
24 | + if (input === '') { | ||
25 | + suggestionsPanel.innerHTML = ''; | ||
26 | + } | ||
27 | +}) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/main/resources/templates/home-page.html
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html lang="en"> | ||
3 | + | ||
4 | + <head> | ||
5 | + <title>Home Page</title> | ||
6 | + <link rel="stylesheet" href="css/home.css"/> | ||
7 | + </head> | ||
8 | + | ||
9 | + <body> | ||
10 | + <p class="emphy">Type anything</p> | ||
11 | + <div class="container"> | ||
12 | + <input class="search-input" type="text" placeholder="Search here..." /> | ||
13 | + <div class="suggestions"> | ||
14 | + </div> | ||
15 | + </div> | ||
16 | + | ||
17 | + <script src="js/main.js"></script> | ||
18 | + </body> | ||
19 | + | ||
20 | +</html> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment