Skip to main content

Elasticsearch 7.3 활용해보기 #5

index이름/_search 를 이용한 한글 검색을 해보도록 합시다. 이게 참 단어가 인덱싱이 잘되어있어야 검색이 되는데, #4에서 봤던 userdict_ko.txt 같은 파일에 고유명사나 분해되면 안되는 단어들은 잘 기록해두도록 해야 합니다.

한글처리가 가능한 index 생성

검색을 하기위한 환경을 만들어봅니다. kibana console에 한글 처리가 가능한 index를 생성하기위해서 다음 쿼리를 console에 복붙(!!) 해봅니다.

PUT my_index
{
  "settings":{
      "number_of_shards":1,
      "number_of_replicas":0,
      "index":{
        "analysis":{
          "tokenizer":{
            "nori_tokenizer_mixed_dict":{
              "type":"nori_tokenizer",
              "decompound_mode":"mixed",
              "user_dictionary":"userdict_ko.txt"
            }
          },
          "analyzer": {
            "korean":{
              "type":"custom",
              "tokenizer":"nori_tokenizer_mixed_dict",
              "filter":[
                "nori_readingform","lowercase",
                "nori_part_of_speech_basic"]
              }
            },
            "filter":{
              "nori_part_of_speech_basic":{
                "type":"nori_part_of_speech",
                "stoptags":["E","IC","J","MAG","MAJ","MM","SP","SSC","SSO","SC","SE","XPN","XSA","XSN","XSV","UNA","NA","VSV"]
          }
        }
      }
    }
  }
}

생성되었다는 메시지를 확인하시고..

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_index"
}

대량 데이터 추가(bulk api)

대량(??)의 데이터를 5개 정도 추가해봅시다. 서버에서 해도 되지만, console에 직접 추가해도 잘 되더군요 ^^ 다만 데이터 부분은 한라인에 다 적어야 한다는 점은 주의해야 할 것 같습니다. -_- 모양땜에 엔터를 좀 넣어줬더니 잘 작동 안하더군요.

POST my_index/_bulk
{ "index":{} }
{ "title" : "청산별곡", "note" : "살어리 살어리랏다 靑山에 살어리랏다. 멀위랑 달래 먹고 靑山에 살어리랏다.얄리얄리 얄랑셩 얄라리 얄라" }
{ "index":{} }
{ "title" : "가시리", "note" : "가시리 가시리잇고 나는 버리고 가시리잇고 나는 위 증즐가 大平盛代 " }
{ "index":{} }
{ "title" : "정과정", "note" : "내 님을 그리워하여 울고 있으니 산 접동새와 내 신세가 비슷합니다." }
{ "index":{} }
{ "title" : "西京별곡", "note" : "西京이 아즐가 西京이 셔울히 마르는 위 두어렁셩 두어렁셩 다링디리" }
{ "index":{} }
{ "title" : "쌍화점", "note" : "만두가게에 만두 사러 갔더니 회회아비가 내 손목을 쥐었더라." }

이외에도 일괄적으로 업데이트 및 삭제도 가능하니 다음 자세한 내용을 참고하세요.
(자세한 내용: https://www.elastic.co/guide/en/elasticsearch/reference/7.3/docs-bulk.html )

추가된 데이터를 확인해보면….

GET my_index/_search
{
  "took" : 506,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "Dt4MH20BjjMy29Rvz-kp",
        "_score" : 1.0,
        "_source" : {
          "title" : "청산별곡",
          "note" : "살어리 살어리랏다 靑山에 살어리랏다. 멀위랑 달래 먹고 靑山에 살어리랏다.얄리얄리 얄랑셩 얄라리 얄라"
        }
      },
~~~~ 생략함 ~~~~~

“total” : “value” : 5, 로 잘 들어간것으로 나옵니다.

한글 검색해보기

이제부터 한글을 검색해봅시다. 여러가지 쿼리가 있고 검색 방법이 있지만 다음 쿼리를 통해 검색해봅시다. 검색할 필드를 지정해주고 query에 검색어를 넣어줍니다. 해당하는 단어가 찾아지게 하기 위해서 *(wildcard)를 넣어주었습니다. 뿐만 아니라 AND 와 OR를 지원하여 상세히 검색할 수 있씁니다.

GET my_index/_search
{
  "query": {
    "query_string": {
      "fields": ["title","note"],
      "query": "*얄리*"
    }
  }
}
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "Dt4MH20BjjMy29Rvz-kp",
        "_score" : 1.0,
        "_source" : {
          "title" : "청산별곡",
          "note" : "살어리 살어리랏다 靑山에 살어리랏다. 멀위랑 달래 먹고 靑山에 살어리랏다.얄리얄리 얄랑셩 얄라리 얄라"
        }
      }
    ]
  }
}

여담이지만 -_- 요구 스팩에 맞춰서 서비스를 이렇게 만들었는데 별로 안빠른거 같에서 고민이 많아집니다. query_string 말고 match_all 등의 쿼리를 참조하면 좀더 빠른 검색이 가능할 것 같습니다.

(참고: https://www.elastic.co/guide/en/elasticsearch/reference/7.3/search.html )

오늘은 여기까지…..

Elasticsearch 7.3 활용해보기 #4

DB라면 기본적인 CRUD를 만들어봅시다. Elasticsearch는 RestAPI 다루듯이 쿼리한다고 생각하면 접근이 쉽습니다. 실제로 http 프로토콜로도 쿼리가 가능해서 서버에서 cros 접근설정이 되어있다면, Javascript로도 충분히 컨트롤이 가능하지요..

RestAPI에서 데이터를 가져올때 GET, 추가할때 POST, 삭제할때 DELETE, 수정할때 PUT을 사용하는 것처럼 Elasticsearch에서도 동일하게 사용됩니다

Elasticsearch에서는 index가 DB의 역할을 함으로 데이터를 추가하기위해서는 먼저 정의해야합니다. mapping을 통해 특별한 구조를 줄수도 있고 #3에서 처럼 Analyzer를 추가하여 단어의 색인 방법을 추가할 수도 있습니다.

index 생성

index를 추가하는 방법은 간단합니다.

PUT my_index
{

}

Kibana console에서 HTTP메서드인 PUT으로 간단히 이름만 적어줘도 생성되게 됩니다.

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_index"
}

문서(Document) 추가하기

만들어진 index에 문서를 추가해보면, 다음과 같이 작성할 수 있습니다. 원래는 _doc대신에 type(mapping정보?? info?? )가 들어갔으나, 7.0 이후로는 무형식API로 _doc로만 적어준다고합니다. ( https://www.elastic.co/kr/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0 )

POST my_index/_doc
{
  "name":"안주성",
  "age":"21",
  "gender":"남자"
}

추가된 결과는 다음처럼 나타납니다. _id는 특별히 부여하지 않았기 때문에 랜덤형식으로 나타나게 됩니다. _id를 지정하게 된다면 my_index/_doc/1 처럼 지정할 수 있습니다. _id는 문서를 컨트롤하는데 사용되게 됩니다.

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "VtJO8mwBjjMy29RvFDdO",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

문서를 리스트로 불러오기

추가된 문서를 확인하기 위해서는 GET메서드를 사용합니다. _search로 호출되게 되며, 여러가지 검색조건을 덧붙일 수도 있습니다.(추후에 자세히 … 지금은 연습니니깐 -_- )

GET my_index/_search
{
  
}

응답은 다음과 같습니다. 불러다 쓸때는 hits.hits._source로 접근하여 실제 데이터를 가져다 쓸수있습니다.

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "VtJO8mwBjjMy29RvFDdO",
        "_score" : 1.0,
        "_source" : {
          "name" : "안주성",
          "age" : "21",
          "gender" : "남자"
        }
      }
    ]
  }
}

하나의 문서 불러오기

이번에는 하나의 문서만 호출해봅시다. 하나의 문서를 호출하기 위해서는 _id를 알고 있어야합니다. 다음같이 쿼리해봅니다. (주의할점은 여기에 {}를 주면 PUT 도 아닌데 문서가 갱신되게 되더군요 )

GET my_index/_doc/VtJO8mwBjjMy29RvFDdO

그러면 결과는… 해당 문서의 _source로 접근해 데이터를 가져올 수 있습니다.

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "VtJO8mwBjjMy29RvFDdO",
  "_version" : 1,
  "_seq_no" : 3,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "안주성",
    "age" : "21",
    "gender" : "남자"
  }
}

문서의 갱신

문서를 갱신해봅시다. 문서갱신은 index생성과 마찬가지로 PUT메서드를 사용합니다. 다른점은 _id가 호출 주소에 덧붙여져 있습니다.

PUT my_index/_doc/VtJO8mwBjjMy29RvFDdO
{
  "name" : "안주섬",
  "age" : "39",
  "gender" : "남자"
}

정상적으로 갱신되었다면… _version이 증가하고 성공 메시지를 볼수 있습니다.

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "VtJO8mwBjjMy29RvFDdO",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

다시 GET으로 확인해보면.. 데이터가 갱신 된것을 확인할 수 있습니다.

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "VtJO8mwBjjMy29RvFDdO",
  "_version" : 2,
  "_seq_no" : 3,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "안주섬",
    "age" : "39",
    "gender" : "남자"
  }
}

문서의 삭제

문서의 조회와 유사하게 DELETE메서드를 통해 문서를 삭제할 수 있습니다.

DELETE my_index/_doc/VtJO8mwBjjMy29RvFDdO

잘 삭제되었다면,

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "VtJO8mwBjjMy29RvFDdO",
  "_version" : 3,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 5,
  "_primary_term" : 1
}

다시 GET으로 해당 ID를 확인해보면.. 찾을 수 없다고 나옵니다. ㅎ

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "VtJO8mwBjjMy29RvFDdO",
  "found" : false
}

index 삭제

index도 삭제해봅시다.

DELETE my_index

정말 간단하게 삭제되는군요….

{
  "acknowledged" : true
}

여기까지 입니다. -ㅅ-) …

다음에는 index/_search 의 상세조건알 알아봐야겠네요…

Elasticsearch 7.3 활용해보기 #3

생각해보니 이 앞전에 해보았던 자연어 처리기를 활용하여 인덱스에 세팅해보니 뭔가가 부족함이 있어 보입니다. 무슨 말이냐면, 붙어있는 단어들을 처리하지 못해서 mysql 에서의 field like ‘%이장님%’ 과 같은 단어를 처리하지 못하였습니다.

그래서 인덱스 생성시에 tokenizer 등을 추가적으로 지정해줄 필요가 있습니다. -_-

#2 에서 봤던 기본 분석기로는 세팅을 바꿀 수가 없어서 분석기가 포함된 인덱스를 만들어봅시다. 간단한 테스트를 할 때는 kibana의 console을 통해서 할 수 있습니다.

사용된 코드는 다음과 같습니다. 이렇게하면 korean_dict 인덱스가 생성되며, 이 인덱스의 설정에 따라 인덱스에 추가되는 문서들이 분석되게 됩니다. (원래 하고자하는 테스트도 할수 있습니다. -_-) 한글을 인덱스 만들때 쓸수 있음으로 아래의 세팅 내용은 잘 기억해둬야 될거 같습니다. (그러기엔 좀 길지만;;; 복사해서… … )

PUT korean_dict
{
  "settings":{
      "number_of_shards":1,
      "number_of_replicas":0,
      "index":{
        "analysis":{
          "tokenizer":{
            "nori_tokenizer_mixed_dict":{
              "type":"nori_tokenizer",
              "decompound_mode":"mixed",
              "user_dictionary":"userdict_ko.txt"
            }
          },
          "analyzer": {
            "korean":{
              "type":"custom",
              "tokenizer":"nori_tokenizer_mixed_dict",
              "filter":[
                "nori_readingform","lowercase",
                "nori_part_of_speech_basic"]
              }
            },
            "filter":{
              "nori_part_of_speech_basic":{
                "type":"nori_part_of_speech",
                "stoptags":["E","IC","J","MAG","MAJ","MM","SP","SSC","SSO","SC","SE","XPN","XSA","XSN","XSV","UNA","NA","VSV"]
            }
          }
        }
      }
    }
}

여기서 userdict_ko.txt 파일이 있습니다. 기본적인 nori 기능 이외에 추가적인 필터들 nori_readingform, nori_part_of _speech_basic 등을 추가하고 사용자 사전도 추가되었습니다.

사용자 사전은 다음 경로에 있습니다.

/etc/elasticsearch/userdict_ko.txt

사용자 사전의 용도는 인덱싱을 위해 잘라지지 않는 단어들에 대한 분리를 정의 할 수 있습니다. 전체 단어와 그 단어가 잘라진 모양을 기록해두면 됩니다.

고양이톱밥 고양이 톱밥
한글형태소분석기 한글 형태소 분석기
대한민국임시정부수립기념일 대한민국 임시정부 수립 기념일
우리동내 우리 동내

..... 등등 단어의 확장으로 ... 
도스르다 무슨 일을 하려고 벌려서 마음을 가다듬다(X 이건안됨)

반드시 해당하는 단어가 분리된 형태여야만 합니다.
(다른걸 집어 넣었떠니 오류가 -_-… )

뭐 어쨌뜬 이렇게해서 다시 토큰 분석 쿼리를 날려보면..

GET korean_dict/_analyze
{
  "analyzer": "korean",
  "text": "대한민국임시정부수립기념일"
}

단어분리가 사전에 정의한 단어를 포함하여 파싱되는 것을 확인 할 수 있습니다.

{
  "tokens" : [
    {
      "token" : "대한민국",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "word",
      "position" : 0,
      "positionLength" : 2
    },
    {
      "token" : "대한",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "민국",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "임시",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "정부",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "수립",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "word",
      "position" : 4
    },
    {
      "token" : "기념일",
      "start_offset" : 10,
      "end_offset" : 13,
      "type" : "word",
      "position" : 5,
      "positionLength" : 2
    },
    {
      "token" : "기념",
      "start_offset" : 10,
      "end_offset" : 12,
      "type" : "word",
      "position" : 5
    },
    {
      "token" : "일",
      "start_offset" : 12,
      "end_offset" : 13,
      "type" : "word",
      "position" : 6
    }
  ]
}

그렇다면 원래 분석기는 사용자 사전에 해당하는 단어가 검색되지 않습니다.
(#2에 사용된 쿼리를 이용하였습니다.)

{
  "tokens" : [
    {
      "token" : "대한",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "민국",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "임시",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "정부",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "수립",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "word",
      "position" : 4
    },
    {
      "token" : "기념",
      "start_offset" : 10,
      "end_offset" : 12,
      "type" : "word",
      "position" : 5
    },
    {
      "token" : "일",
      "start_offset" : 12,
      "end_offset" : 13,
      "type" : "word",
      "position" : 6
    }
  ]
}

만약에 실무에 활용한다면, 사용자 사전에 단어를 추가하여 검색되지 않는 단어를 대응 하면 되지 않을까요!

오늘도 여기까지 -_- …

꾸준히 계속 적어봐야겠네요…

Elasticsearch 7.3 활용해보기 #2

아무것도 모르고 시작한 Elasticsearch…. 이제 좀 어느정도 적응중입니다.

전편에서는 설치를 해보았는데… 그냥 쓰면 한글이 잘 검색되지 않습니다. Elasticsearch는 색인을 하여 검색할 단어를 미리 뽑아놓아야지만 원할한 검색이 이루어집니다. 그냥하게되면 빈칸 단위로 색인이 되어 정확한 단어를 입력해야지만 검색이 되게 됩니다.

공식적으로 제공하는 자연어분석기인 nori를 설치해보았습니다. 다음 링크를 참고하세요.

설치는 기본 폴더에서 처리되게 됩니다. (참고: /usr/share/elasticsearch )

bin/elasticsearch-plugin install analysis-nori

설치는 간단히 끝나지만, 이것만으로 자동으로 적용되지는 않습니다. index(문서의 묶음, DBMS에서 DB의 역할??)에서 적용될 수 있도록 한국어 자연어 분석기를 설정해줘야합니다. (추후에 실제 적용할때 알아봅시다.)

elasticsearch의 구조를 대략 설명하자면 ….
index가 있다. 이 인덱스 속에 mapping이라는 것으로 필드도 세팅할수 있는 것 같습니다. 그렇지만 mapping은 특별히 설정하고 싶다면 해도 되지만, 자동으로 생성되어 각각의 데이터의 필드를 구분 할 수 있었습니다. 뿐만 아니라 데이터(문서)를 추가할 때 색인을 추출함 으로 미리 analyze가 설정되어야합니다. (했던 말을 또하는 것 같은 … 기분이..)

어쨌든 nori를 설치하였다면, kibana에 접속해봅시다.

그리고 메인화면에 있는 Console을 통해서 쿼리를 날려볼 수 있습니다. (메뉴에서 어떻게가는지 모르겠고 메인화면 바로가기 아이콘 중에 있습니다. )

GET _analyze
{
  "analyzer": "nori",
  "text" : "우분투의 버전은 배포판이 나온 연도와 달로 매긴다."
}

쿼리를 보내면 명사와 의미 있는 단어들만 분리 되어 보이는 것을 확인 할 수 있습니다.

뭐 이걸로 인해 단점이 있을 수는 있지만…. (실제 검색에서는 ‘우분’ 만 치면 검색이 되지 않습니다. -_- 완성된 단어로만 검색이 되게 됩니다. mysql 같이 dbms만 쓰던 사람은 적응이 잘….. )

쿼리만 보면 간단해 보이지만, 실제로는 수많은 옵션들이 있습니다. ( …. 뭔가 만만하지 않아요! )

다음편에서는 서버도 준비 되었겠다. 간단한 CRUD를 만들어 볼 예정입니다.
(물론 한글 위주로 작업해볼꺼고 …. JS로도 할수있고 PHP로도 할 수 있습니다. )

Elasticsearch 7.3 활용해보기 #1

안녕하세요!
오랜만에 글을 적는거 같습니다. -_- 뭐 항상 오랜만이죠

원래 회사에서 사용하던 검색엔진인 sphinx의 뭔가 오래됨과 실증과 검색 잘안됨(? 내가 못쓰는걸지도…. )의 오류로 인해 이것저것 찾아보다가 Elasticsearch를 써보게 되었습니다.

운영환경은 CentOS7 64bit, mariadb10, openSDK 가 설치되어있는 DB서버입니다.

계획은 이렇습니다.
기존에 사용하던 데이터들은 mariadb에 저장되어있고, 복잡한 관계성과 많은 양의 텍스트로인해 fulltext search…로 검색되게되고 빠른 속도를 기대하기 힘든 상황이 되었습니다. ( union도 쓰고있었어요… 수많은 검색항목들도… )
그래서 검색엔진을 사용하여 기대할만한 성능을 뽑아보는 것을 목표로 합니다.

쓸려면 설치를 해야겠죠… 다음 사이트를 방문합니다.

뭔가 여러가지 제품이 있지만 이중에서 Elasticsearch만 쓸겁니다.
Kibana는 모니터링 및 각종 시각화를 할 수 있다고합니다. 모니터링 용도로 잠시 사용하고 내릴겁니다. 정식버전이 아니라 로그인도 못만들고…. 일단 보안이… 무엇보다 트라이얼 30일은 좀… (-_- )
그리고 Logstash는 데이터 수집기 및 로그를 정형화하여 Elasticsearch에 저장해줍니다. 이것저것 테스트 해봤는데 mariadb에는 jdbc드라이버를 이용하여 접속하여 쿼리를 보내고 데이터를 수집할 수 있더군요. 생각보다 오래걸려서 패스했습니다.

제가 쓰는 OS는 CentOS라서 Elasticsearch 와 Kibana의 RPM을 받아둡니다.

<다운받은 RPM들>

설치는 간단하게~ 다음처럼 설치합니다.

rpm -Uvh elasticsearch-7.3.1-x86_64.rpm 
rpm -Uvh kibana-7.3.1-x86_64.rpm  

Elasticsearch 설치가 끝나면 기본경로는 다음 경로에 설치되게 됩니다.
( 기본적으로 설치되는 다른 프로그램들과 똑같습니다. )
/etc/elasticsearch (환경설정)
/usr/share/elasticsearch (본체 …. )
/var/log/elasticsearch (로그!)

Kibana의 경로는
/etc/kibana

실행하기전에 환경설정이 필요합니다. 없는 설정은 넣어주시고 있는건 맞게 사용 환경에 맞게 고치시기 바랍니다. 아래의 설정은 모든 IP를 다 열어두었음으로 접속할 아이피만 열어서 사용하시기를 권장드립니다.

vi /etc/elasticsearch/elasticsearch.yml

# ---------------------------------- Cluster -----------------------------------
cluster.name: myES

# ------------------------------------ Node ------------------------------------
node.name: myNode
cluster.initial_master_nodes: myNode

network.host: 0.0.0.0
network.bind_host: 0.0.0.0
http.port: 9200

# ---------------------------------- Network -----------------------------------
http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length

데이터가 저장되는 경로를 바꾸기위해 path.data를 수정할경우 selinux 설정이 필요할 수 있습니다.

여기까지 되었으면 서비스를 시작해봅니다.

service elasticsearch start

실행에 서버 사양에 따라 시간이 좀 걸릴 수도 있으며, 잘못된 설정이나 환경인경우 서버가 실행이 안될수도 있습니다. 이 때는 로그를 보시거나 service elasticsearch status를 통해 간단하게 확인할 수 있습니다.

브라우저를 열고 http://설치한호스트:9200 을 입력해봅니다.

혹시… cluster_uuid가 비어있거나 없으면 노드의 이름이 잘못되었거나 다른 타입의 노드로 등록된 것임으로 설정을 다시 수정해야합니다.
이렇게 서버의 사양이 나오면 정상적으로 실행 된 것입니다.

kibana 설정도 해서 올려봅시다.

vi /etc/kibana/kibana.yml

server.port: 5555 #뭐 꼭 이게 아니라도 됨..... 
server.host: "114.xxx.xxx.xxx" #외부에서 접속할 호스트또는 IP

elasticsearch.hosts: "http://localhost:9200" #elasticsearch의 호스트주소:포트

elasticsearch의 주소만 맞으면 별다른 문제는 없습니다. 이것도 서비스로 실행해줘야합니다.

service kibana start

브라우저로 http://설치한 호스트:5555 로 접속해보고 다음과 같은 관리 사이트가 뜨면 설치가 완료된 것입니다.

오늘은 여기까지입니다. -_-….