legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #16 ElasticSearch 적용

3hoon 2023. 2. 26. 15:56

Elastic Search

주소 검색 시 Stop-word Parser와 ngram Parser의 문제

현재 가게 이름은 Ngram parser, 도로명 주소는 stop-word 방식으로 인덱싱 되어있다.

 

현 상태에서 검색 키워드를 “화곡”으로 검색한다면

⇒ 화곡동으로 검색 시 11427건의 데이터가 있는것을 확인할 수 있음

⇒ 이때, 키워드를 “화곡”으로 검색한다면 어떠한 검색 결과도 얻을 수 없다.

 

이유는 주소는 Stop-word 인덱싱 방식이기 때문에 “화곡동”이라는 키워드로만 검색을 할 수 있다.

⇒ 해당 인덱싱 방식에서는 “화곡동”과 “화곡”은 다른 단어가 된다.

 

“강서구 화곡동 화곡빌딩”을 인덱싱 한다면?

stop-word ⇒ 강서구 / 화곡동 / 화곡빌딩

ngram ⇒ 강서 / 서구 / 구화 / 화곡/ 곡동 / 동화 / 화곡 / 곡빌 / 빌딩

 

하지만 위에서 알아보았던 것 처럼 도로명주소를 “ngram”방식으로 인덱싱 한다면,

”용산구”를 검색하였을 때 아래와 같이 잘못된 키워드를 받게 될 가능성이 있다. 😅

그럼 어떻게 해결 할 수 있을까?

  • 주소 검색을 위해서는 “화곡동”이라는 정보를 얻기 위해서는 “화곡동”이라는 키워드도 쓸 수 있고, ”화곡”이라는 키워드도 쓸 수 있어야 한다.
  • 위의 두 키워드를 동시에 사용하려면 Stop / ngram 인덱싱 방식을 동시에 사용해야함
  • ⇒ 이러한 문제를 해결하기 위해 Elastic Search의 역색인 방식을 적용 하였다.

Elastic Search를 이용해 인덱싱 한다면?

stop-word ⇒ 강서구 / 화곡동 / 화곡빌딩

ngram ⇒ 강서 / 서구 / 구화 / 화곡/ 곡동 / 동화 / 화곡 / 곡빌 / 빌딩

 

역색인 ⇒ 강서구 / 화곡동 / 화곡빌딩 / 강서 / 서구 / 구화 / 화곡 / 곡동 / 동화 / 화곡 / 곡빌 / 빌딩

 

* stop-word 방식과 ngram에 대한 부분 모두 대비된 채로 인덱싱이 되었다!

 

테스트 결과 :

“화곡” 키워드 Elastic Search에 검색 시

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 11,
      "relation" : "eq"
    },
    "max_score" : 11.055591,
    "hits" : [
      {
          "road_name_address" : "서울특별시 강서구 화곡로25길 25, 1층 (화곡동, 화곡 3동)",
					"road_name_address" : "서울특별시 강서구 강서로 191, 지하1층 (화곡동, 화곡 3동)",
					"road_name_address" : "서울특별시 강서구 곰달래로16길 29, 1층 (화곡동, 화곡 1동 )",
					"road_name_address" : "서울특별시 강서구 화곡로25길 25, 1층 (화곡동, 화곡 3동)",
					"road_name_address" : "서울특별시 강서구 강서로 145, 1층 101호 (화곡동, 보눔 하우스 화곡)",
					"road_name_address" : "서울특별시 강서구 화곡로 286-4, 화곡 6동 지하 1층 (화곡동)",
          "road_name_address" : "서울특별시 강서구 화곡로 286-4, 화곡 6동 지하 1층 (화곡동)",
					"road_name_address" : "서울특별시 강서구 강서로 27, 화곡 심포니 타워 4층 401호 (화곡동)",
					"road_name_address" : "서울특별시 강서구 강서로 145, 1층 101호 (화곡동, 보눔 하우스 화곡)",
					"road_name_address" : "서울특별시 강서구 강서로 145, 1층 102호 (화곡동, 보눔 하우스 화곡)",

        }
      }

⇒ 원하는 방식대로 “화곡”이라는 키워드로 “화곡”과 “화곡동”의 정보를 다 얻을 수 있게 되었다.!

 

성능 측정 결과 :

⇒ 검색 성능 개선이 어려웠던 업종 부분의 검색 소요시간이 78%로 단축 된 것을 확인할 수 있다.

⇒ FullScan과 비교시 최소 -95.44%, 최대 -98.68%의 검색 소요시간을 단축하였다.