퀵 검색 로직 구현하기 1편

조성철 (JoSworkS)·2020년 2월 18일
1

이번 로그에서는 유저가 집을 찾기 위해 임의의 검색문장으로 검색하였을 때, 유저의 검색 문장과 가장 어울리는 하우스 하우스를 찾아 주는 로직을 구현한 방법에 대해 기록하고자 한다.

문제의 배경

  1. 수 많은 부동산 하우스 중 유저의 니즈를 반영한 검색결과를 제시하기 어려웠다.
  2. 호스트가 올린 하우스의 타이틀만으로는 해당 부동산 하우스의 특징을 반영하기 어려웠다.
  3. MySQL 쿼리로는 동적인 처리를 하기 어려웠다.

검색 로직 고려사항

하우스 검색을 위한 로직을 구현하기 위해서 다음과 같은 사항을 고려하였다.

  1. 유저의 검색문장(또는 단어)에 가장 유사한 하우스를 응답할 것
  2. 다양한 검색 패턴을 고려하여 패턴에 맞는 하우스를 응답할 것
  3. 검색 패턴을 고려하기 위한 근거를 바탕으로 로직을 구현할 것

검색 유형 구분

  1. 단어형: 서울 / 원룸 / 한강 / 루프탑 등
  2. 문장형
    • 단문형: 부산 해운대에 있는 뷰가 좋은 아파트
    • 질문형: 부산 해운대에 있는 뷰가 좋은 아파트는?
    • 평문형: 부산 해운대에 있는 뷰가 좋은 아파트를 찾습니다.

검색빈도: 단어형 > 단문형 > 질문형 > 평문형

검색요소별 우선순위 설정

검색요소란 데이터베이스를 구성하는 필드 중 검색조건에 부합하는 요소들을 선정하였다. 그리고 선정된 요소들 중 '서비스 시용자의 기본 니즈'에 기반하여 우선순위를 설정하였다.

  1. 유형(type): 아파트, 오피스텔, 원룸, 빌라, 주택
    • 우선순위: 높음 / 가중치: 3
  2. 행정구역(adminDistrict): 성남시 / 부여군 / 강남구
    • 우선순위: 높음 / 가중치: 3
  3. 제목(title): 강남 대치동에 있는 깨끗한 원룸입니다.
    • 우선순위: 보통 / 가중치: 2
  4. 하우스 설명(description): 편의시설이 많아 거주하기 좋습니다.
    • 우선순위: 낮음 / 가중치: 1
  5. 하우스룰(houseRule): 외부인 출입금지, 애완동물 금지 등
    • 우선순위: 낮음 / 가중치: 1

검색요소별 우선순위 적용

앞에서 설정한 검색요소별 우선순위를 코드 통해 보도록 하겠다. 타입과 행정구역은 가중치 3점, 제목은 2점, 하우스 설명과 하우스 룰은 1점으로 차등 적용하도록 되어있다.

각 검색요소별로 우선순위에 따라 가중치 3 / 2 / 1점 차등 적용

필수 문장요소 구분

문장형 검색을 위해 한국어의 필수문장 요소를 구분하고 이에 따라 자주 사용되는 형태의 검색문장을 요소별로 구분하는 작업을 진행하였다.

  1. 주어: 문장의 주체이며 [~은/~는/~이/~가] 조사가 사용됨
  2. 서술어: 주어의 동작, 작용, 상태 등을 설명하며 [~하다/~이다/~다] 로 끝남
  3. 목적어: 행위의 대상이 되는 말이며 [~을/~를] 의 조사가 사용됨
  4. 보어: 서술어의 부족한 부분을 채우며 주어와 서술어 사이에서 사용됨
  5. 부사어: 필수 문장요소는 아니지만 검색문장에서 자주 사용되며 [~에/~로] 가 사용됨

예시문장: 부산 해운대에(부사어) 있는 뷰가(주어) 좋은(서술어) 아파트(목적어)

필수 문장요소별 우선순위 설정

다음과 같이 필수 문장요소별 우선순위를 설정하였으며, 그 근거는 아래와 같다. 그리고 앞서 데이터베이스의 검색요소별로 우선순위를 설정한 것처럼 각 문장 요소별로 가중치를 주어 가중치가 높은 문장 요소가 사용된 하우스가 더 높은 검색 우선순위를 갖도록 하였다.

  1. 목적어: 주요 검색요소인 하우스의 타입이 나올 가능성이 높다.
    • 우선순위: 높음 / 가중치: 3
  2. 부사어: 주요 검색요소인 행정구역이 나올 가능성이 높다.
    • 우선순위: 높음 / 가중치: 3
  3. 주어: 검색을 위한 문장에선 주어가 생략될 가능성이 있다.
    • 우선순위: 보통 / 가중치: 2
  4. 서술어: 주어와 같은 이유
    • 우선순위: 낮음 / 가중치: 1
  5. 보어: 검색문장은 간단명료하게 적으므로 활용성이 떨어진다.
    • 우선순위: 낮음 / 가중치: 1

주어와 서울어의 생략 예시: 부산해운대에 있는 (뷰가 좋은) 아파트

필수 문장요소별 우선순위 적용

쪼개진 각 단어들을 문장요소의 특징에 따라 분류하여 가중치를 적용하도록 하였다.

서술어의 경우 ~다/~이다/~하다 등으로 끝나게 되지만 이런 형식의 문장은 검색에서는 거의 사용되지 않고 다음 단어를 형용하는 은/는 의 형태로 변화되어 사용된다. 따라서 주어와 같이 ‘은/는’에서 가중치 2점이 적용이 될 수 있도록 하였다.

또한 조사가 생략된 부사어와 목적어는 검색문장에서 핵심적인 역할을 하는 경우이므로, 위 가정문에 해당하지 않으면 일반적인 단어로 볼 수 있으므로 가중치 3점을 적용하도록 하였다.

각 문자요소별로 우선순위에 따라 가중치 차등 적용

0개의 댓글