본문 바로가기

Data Science/Elasticsearch

엘라스틱 서치 활용

Elasticsearch



프로젝트에 사용할 일이 있는데 자꾸 까먹어서 필요한대로 업데이트 할 예정


1. 새 인덱스 생성하기

curl -XPUT http://elasticsearchAddress/indexName -d '

{

    "settings" : {

        "index" : {

            "number_of_shards" : 5,

            "number_of_replicas" : 0

        }

    }

}

'



2. 생성된 인덱스에 맵핑 설정하기


 - 이외에 더 많은 세팅을 할 수 있지만 기본적으로 Time을 데이터가 생성되는 시간을 입력받도록 설정하였다.

   Elasticsearch의 큰 장점중 하나가 Json을 던지면 알아서 맵핑을 설정해준다는 것이지만 기본적으로 시간 정보는 미리 설정해놔야 추후에 스트링과 타임스탬프를 헷갈려하는 일이 없는거 같다.


curl -XPUT http://elasticsearchAddress/indexName/_mapping/mappingName -d '

{

    "mappingName" : {

        "properties" : {

            "Time" : {

                "type" : "date", 

                "format" : "date_time" 

            }

        }

    }

}




3. 입력한 데이터 쿼리 날리기


 - query statement 부분을 바꾸면 된다. 이 외에도 쿼리하는 방법은 무수히 많은데 일단 여기까지 하자


curl -XGET http://elasticsearchAddress/indexName/mappingName/_search?pretty=true -d '

    "query" : {

        "query_string" : {

            "query" : "query statement"

        }

    }

}

'



4. 데이터 입력하기


 - Json 형태로 날려준다. Time은 아래와 같은 형식도 되고, Timestamp를 그대로 날려도 된다


curl -XPOST http://elasticsearchAddress/indexName/mappingName?pretty=true -d '

{

    "full_name" : "Andrew Puch",

    "bio" : "My name is Andrew. I am an agile DevOps Engineer who is passionate about working with Software as a Service based applications, REST APIs, and various web application frameworks.",

    "age" : 26,

    "location" : "41.1246110,-73.4232880",

    "enjoys_coffee" : true,

    "Time" : "2015-05-02T14:45:10.000-04:00"

}

'



5. 인덱스 지우기


 - 인덱스를 지우면서 데이터도 동시에 날라가기 때문에 조심해서 사용하자


curl -XDELETE 'http://elasticsearchAddress/indexName/'




6. Nested 매핑 설정하기

 - JSON으로 데이터를 보내다보면 구조화된(Nested) 경우가 많다. 이를 위한 매핑 설정이다.


curl -XPUT http://elasticsearchAddress/indexName/_mapping/mappingName -d '

{

    "mappingName" : {

        "properties" : {

            "Name1" : {

            "properties" : {

            "time1" : {

            "type" : "date", 

                "format" : "date_time" 

               }

           }

       }

  }

    }

}'



7. Dash 구문 검색을 없애보자

  - String 데이터에 간혹 abcd-efgh 이런식으로 중간에 대쉬 같은게 붙으면 엘라스틱 서치에서는 자동으로 이를 구문 검색하여 분리한다. 따라서 나중에 전체 String 형식으로 데이터 분석을 하고 싶어도 그게 안될때가 있다. 이를 위해 raw 라는 서브 필드를 만들어주자


curl -XPUT http://elasticsearchAddress/indexName/_mapping/mappingName -d '

{
    "mappingName" : {
        "properties" : {
            "Name1" : {
 "type" : "string", 
                "fields":{
            "raw":{
            "type": "string",
            "index": "not_analyzed"
            }
               }
          }
     }
}
}'

 

굵은 글씨로 표시한 부분이 자동 구문 분석기를 없애주는 raw 서브필드를 생성해준다.

나중에 검색할때 Name1.raw 로 검색하면 된다. 이게 적용되는데는 시간이 좀 걸리는듯 하다.

이렇게만 해놓으면 실제로는 아무일도 안일어난다.

Logstash 같은 곳에서 name.raw 필드에 데이터를 다시 입력해줘야하는 절차가 필요하다.