TIL 23.12.15

황은하·2023년 12월 15일
0

TIL

목록 보기
136/146

📌Today I Learned

ElasticSearch

기존 프로젝트 + 엘라스틱서치 검색 기능 추가

  1. 의존성 추가
    • pom.xml
<!-- Elasticsearch -->
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-high-level-client</artifactId>
			<version>7.17.15</version>
		</dependency>
  1. 이미 구축된 오라클 데이터베이스의 일부 정보 > 엘라스틱서치

    • 검색할 정보 > 검색 대상 컬럼 + 검색 결과 화면 출력 => 옮겨담기
    • tblBook > (seq, title, image, discount, author, publisher) 컬럼
  2. 오라클(tblBook) > (복사) > 엘라스틱서치(book)

    • Logstash(Beats)

Logstash

어디에서(우리는 Oracle) 데이터를 받아(input) 어디론가(우리는 Elasticsearch) 데이터를 전달하는(output) 역할

input -> jdbc 사용

filter -> 전달받은 값을 가공 가능

output -> 주소, 인덱스, pk

a. ojdbc.jar > 우분투(WSL)에 복사하기

b. Logstash Config파일 생성하기 > "home/ubuntu/book.conf"

Logstash -> 우리 컴퓨터로 접근해야 한다.
다른 IP 주소 필요

WSL > 오라클 내부 IP 주소를
$ ip route show | grep -i default | awk '{print $3}'

c. 윈도우즈 방화벽 열기 > 인바운드 규칙(1521포트)




synonym -> 동의어 지정
stop -> 검색 제한 단어 지정


프로젝트 > AWS 배포

  1. 환경 확인 (MabaXterm)

    a. Tomcat 동작 유무

    • $ systemctl status tomcat

    b. Oracle 동작 유무

    • $ systemctl status oracle-xe

    c. Elasticsearch
    d. Kibana
    e. Logstash

=> c~e 없어서 설치 진행

$ sudo apt-get update

$ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch |sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
$ echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt-get update

$ sudo apt-get install elasticsearch

$ sudo apt-get install kibana

$ sudo apt-get install logstash

$ sudo systemctl enable elasticsearch
$ sudo systemctl enable kibana

$ sudo vi /etc/elasticsearch/elasticsearch.yml

$ sudo systemctl start elasticsearch
$ sudo vi /etc/kibana/kibana.yml

$ sudo systemctl start kibana
$ sudo systemctl status kibana

sudo systemctl daemon-reload
sudo systemctl stop elasticsearch
sudo systemctl start elasticsearch


.jar > 압축파일
.war > 웹 애플리케이션 압축파일(=zip)

ftp에 war파일 올리기
aws ubuntu에 nori설치

$ cd /usr/share/elasticsearch
$ sudo bin/elasticsearch-plugin install analysis-nori

$ sudo systemctl restart elasticsearch

$ sudo vi /etc/elasticsearch/synonym.txt
자바 => Java

$ sudo vi /etc/elasticsearch/stop.txt
이펙티브

$ sudo vi book.conf

input {
    jdbc {
        jdbc_driver_library => "/u01/app/oracle/product/11.2.0/xe/jdbc/lib/ojdbc6.jar"
        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
        jdbc_connection_string => "jdbc:oracle:thin:@localhost:1521/xe"
        jdbc_user => "hr"
        jdbc_password => "java1234"    
        statement => "select seq, title, image, discount, author, publisher from tblBook"
        jdbc_validate_connection => "true"
    }
}
filter {
  mutate {
    remove_field => ["@version", "@timestamp"]
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "book"
    document_id => "%{seq}"
  }
}


ubuntu에서 검색
$ sudo find /u01 -name ojdbc6.jar

/u01/app/oracle/product/11.2.0/xe/jdbc/lib/ojdbc6.jar



----

$ sudo vi /etc/elasticsearch/elasticsearch.yml

업로드중..

$ sudo systemctl restart elasticsearch

book.txt 파일 복붙
curl -X PUT "localhost:9200/book" -H "Content-Type: application/json" -d '{ 	"mappings" : {       "properties" : {         "author" : {           "type" : "text",           "fields" : {             "keyword" : {               "type" : "keyword",               "ignore_above" : 256             }           }         },         "discount" : {           "type" : "long"         },         "image" : {           "type" : "keyword"         },         "publisher" : {           "type" : "text",           "fields" : {             "keyword" : {               "type" : "keyword",               "ignore_above" : 256             }           }         },         "seq" : {           "type" : "long"         },         "title" : {           "type" : "text",           "fields" : {             "keyword" : {               "type" : "keyword",               "ignore_above" : 256             }           },           "analyzer": "nori_token"         }       }     },     "settings": { 	    "analysis": { 	      "analyzer": { 	        "nori_token": { 	          "type": "custom", 	          "tokenizer": "nori_tokenizer", 	          "filter": ["my_synonym", "my_stop"] 	        } 	      }, 	      "filter": { 	        "my_synonym": { 	          "type": "synonym", 	          "synonyms_path": "synonym.txt" 	        }, 	        "my_stop": { 	          "type": "stop", 	          "stopwords_path": "stop.txt" 	        } 	      } 	    } 	} }'


$ sudo /usr/share/logstash/bin/logstash -f book.conf

  1. 지금 작업 마무리
  2. 계정 1개 선택 > 팀당 1개
  3. 어떤 부분 검색 기능 구현
    • 구현
  4. 서버 배포

=> 월~화요일
모든 작업 완료(배포 포함) > 수요일


profile
차근차근 하나씩

0개의 댓글