# 데이터베이스 전체 텍스트 검색 기능/한계?

**URL:** https://meta.discourse.org/t/database-full-text-search-capabilities-limits/176590
**Category:** Development
**Created:** [1월 19, 2021, 6:18오후 UTC](https://meta.discourse.org/t/database-full-text-search-capabilities-limits/176590 "2021-01-19T18:18:23Z")
**Posts on this page:** 1
**Showing post:** 2

<div class="post-metadata">

### Author: ![tgxworld](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tgxworld/32/106117_2.png) [@tgxworld](https://meta.discourse.org/u/tgxworld)
#### Post date: [1월 20, 2021, 1:29오전 UTC](https://meta.discourse.org/t/database-full-text-search-capabilities-limits/176590/2 "2021-01-20T01:29:51Z")

</div>

> [@tgxworld](#):
>
> 완전 일치나 부분 일치에 대해 순위를 매길 수 있는 방법이 없습니다.

이 진술을 명확히 설명해 드리겠습니다. 완전 일치(exact match)의 경우, 결과가 일치하는지 아닌지만 판단하면 되므로 순위를 매길 필요가 없습니다. 부분 일치(contains match)의 경우, 어떤 결과를 더 높은 순위에 놓아야 할지 어떻게 결정할까요?

1. 이것이 제 **검색어** 입니다
2. **검색어** 는 흥미롭습니다
3. 제목이 더 길기 때문에 여기서는 **검색어** 가 더 흥미롭습니다

위 제목들은 모두 검색어를 포함하고 있으므로, 문제는 결과를 어떻게 순위 매길 것인가입니다. 현재 우리는 Postgres의 랭킹 함수에 의존하여 이 문제를 해결하고 있습니다.

> [랭킹 시도](https://www.postgresql.org/docs/13/textsearch-controls.html#TEXTSEARCH-RANKING)는 문서가 특정 쿼리에 얼마나 관련성이 높은지를 측정하여, 일치하는 항목이 많을 때 가장 관련성이 높은 항목을 먼저 표시할 수 있도록 합니다. PostgreSQL은 사전 정의된 두 가지 랭킹 함수를 제공하며, 이들은 어휘적, 근접성, 구조적 정보를 고려합니다. 즉, 쿼리 용어가 문서에 얼마나 자주 등장하는지, 문서 내에서 용어들이 얼마나 가까이 위치하는지, 그리고 용어가 발생하는 문서의 부분이 얼마나 중요한지를 고려합니다. 그러나 관련성의 개념은 모호하며 애플리케이션에 따라 매우 구체적입니다. 다른 애플리케이션에서는 랭킹을 위해 추가 정보가 필요할 수 있으며, 예를 들어 문서 수정 시간 등이 해당될 수 있습니다. 내장된 랭킹 함수는 예시일 뿐입니다. 특정 요구 사항에 맞게 사용자 정의 랭킹 함수를 작성하거나, 그 결과를 추가 요인과 결합할 수 있습니다.

Postgres가 고려하는 요인들은 다양하지만, 궁극적으로 랭킹은 여전히 다소 모호하며, 포럼 콘텐츠의 구조에 따라 사이트마다 크게 달라질 수 있습니다. Discourse에서의 목표는 대부분의 포럼에서 잘 작동할 수 있는 좋은 기본값을 제공하는 것입니다.

---

_[View the full topic](https://meta.discourse.org/t/database-full-text-search-capabilities-limits/176590)._
