엔지니어 블로그

Elasticsearch로 검색기능 구현 -1 본문

개인 프로젝트/Elk 검색기능 구현 프로젝트

Elasticsearch로 검색기능 구현 -1

안기용 2022. 3. 30. 08:31

서울시 상가 정보 데이터로 검색 기능을 구현하는 프로젝트를 진행한다.

1.데이터 전처리

우선 빅데이터 포털에서 csv로 된 raw data를 다운받아 columns를 확인해 봤다.

pandas를 사용해서 30개가 넘는 columns 중 필요한 것만 남기고 모조리 삭제했다.
logstash로 필터링해서 가져오고 싶었지만 data의 크기가 너무 커서 부담스러운 작업이었기 때문이다.

1차 가공된 dataframe

이렇게 필요한 columns만 남긴 후 내부의 data들을 살펴봤다.

눈에 띄는 것은 지점 명과 층 정보에 보이는 null값이었다.

null값은 Es에서 mapping 하면서 해결할 수 있을 것 같아 시도해 보았다.

#default_value 값을 설정해서 해결 시도
floor : {
	"type" : "integer",
    "null_value" : "1"
}

null  값이 들어왔을 때 기본 값으로 1을 설정해 준 것이다. 

하지만 이렇게 했을 때 1로 검색하면 층 정보가 null인 data가 검색되는 것은 맞지만, 원본 데이터가 변경되는 것은 아니었다. 층 정보가 검색 조건으로만 사용되었다면 문제가 되지 않지만, 결과 값으로 사용될 data 였기에 null 값 그대로 출력하는 것은 문제가 되었다.

지점 명 역시 마찬가지였고, 각각 기본 값으로 "미상","1" 을 설정해 주기로 했다.
지점은 프렌차이즈임에도 표기가 안된 부분이 있었고, 층은 확인할 길이 없기 때문에 각각 임의로 설정한 것이다.

그리고 층 이름은 "-1","1F" 등과 같이 단위가 상이해서 다음과 같은 방식으로 모든 층 단위를 통일했다.

df["층정보"] = df['층정보'].str.replace("-2","지하2")
...
df["층정보"] = df["층정보"].astype('str') + '층'

 

다음과 같은 형태의 dataframe이 완성됐다.

전처리 완료된 dataframe