텍스트 분석

원본 보기

텍스트 분석

텍스트 분석은 이메일 본문이나 제품 설명처럼 구조화되지 않은 텍스트를 검색에 최적화된 구조화된 형식으로 변환하는 과정입니다.

텍스트 분석을 통해 Elasticsearch는 전문 검색(full-text search)을 수행할 수 있으며, 이 경우 정확히 일치하는 결과만이 아니라 관련성 있는 모든 결과를 반환합니다. 예를 들어 Quick fox jumps를 검색하면 A quick brown fox jumps over the lazy dog이 포함된 문서를 원할 가능성이 높고, fast foxfoxes leap 같은 관련 단어가 포함된 문서도 원할 수 있습니다.

Elasticsearch는 text 필드를 색인하거나 검색할 때 텍스트 분석을 수행합니다. 인덱스에 text 필드가 없다면 추가 설정이 필요하지 않으므로 이 섹션의 페이지는 건너뛰어도 됩니다. text 필드를 사용하거나 텍스트 검색이 기대한 결과를 반환하지 않는다면, 텍스트 분석을 구성하는 것이 도움이 되는 경우가 많습니다. 다음과 같은 목적으로 Elasticsearch를 사용하고 있다면 분석 구성을 살펴보는 것이 좋습니다.

  • 검색 엔진 구축
  • 비정형 데이터 마이닝
  • 특정 언어에 맞춘 검색 세부 조정
  • 사전편찬학적 또는 언어학적 연구 수행

분석은 토큰화, 즉 텍스트를 토큰이라고 하는 더 작은 조각으로 나누는 과정을 통해 전문 검색을 가능하게 합니다. 대부분의 경우 이러한 토큰은 개별 단어입니다.

the quick brown fox jumps라는 구문을 하나의 문자열로 색인한 상태에서 사용자가 quick fox를 검색하면 일치로 간주되지 않습니다. 하지만 구문을 토큰화해 각 단어를 개별적으로 색인하면 쿼리 문자열의 용어를 개별적으로 조회할 수 있습니다. 즉 quick fox, fox brown 또는 그 밖의 변형으로 검색해도 일치할 수 있습니다.

토큰화는 개별 용어 단위의 일치를 가능하게 하지만, 각 토큰은 여전히 문자 그대로 비교됩니다. 이는 다음을 의미합니다.

  • Quick으로 검색하면 quick과 일치하지 않습니다. 두 용어가 서로 일치하기를 바랄 가능성이 높은데도 그렇습니다.
  • foxfoxes는 같은 어근을 공유하지만, foxes로 검색해도 fox와 일치하지 않으며 그 반대도 마찬가지입니다.
  • jumps로 검색하면 leaps와 일치하지 않습니다. 두 단어는 어근을 공유하지 않지만 동의어이며 비슷한 의미를 가집니다.

이러한 문제를 해결하기 위해 텍스트 분석은 이 토큰들을 표준 형식으로 정규화할 수 있습니다. 이를 통해 검색어와 완전히 같지는 않지만 여전히 관련성이 있을 만큼 충분히 유사한 토큰을 일치시킬 수 있습니다. 예를 들면 다음과 같습니다.

  • Quick은 소문자로 변환할 수 있습니다: quick.
  • foxes어간 추출을 통해 어근으로 축약할 수 있습니다: fox.
  • jumpleap은 동의어이므로 하나의 단어로 색인할 수 있습니다: jump.

검색어가 이러한 단어와 의도한 대로 일치하도록 하려면 쿼리 문자열에도 동일한 토큰화 및 정규화 규칙을 적용하면 됩니다. 예를 들어 Foxes leap 검색은 fox jump 검색으로 정규화될 수 있습니다.

텍스트 분석은 전체 과정을 관장하는 규칙의 집합인 분석기(analyzer)에 의해 수행됩니다.

Elasticsearch에는 표준 분석기라는 기본 분석기가 포함되어 있으며, 별도 설정 없이도 대부분의 사용 사례에서 잘 동작합니다.

검색 경험을 맞춤화하고 싶다면 다른 내장 분석기를 선택하거나 커스텀 분석기를 구성할 수도 있습니다. 커스텀 분석기를 사용하면 다음을 포함해 분석 과정의 각 단계를 제어할 수 있습니다.

  • 토큰화 이전의 텍스트 변경
  • 텍스트가 토큰으로 변환되는 방식
  • 색인 또는 검색 이전에 토큰에 적용되는 정규화 변경