검색 시 정확한 일치 항목만 강제하는 방법?

일부 검색에서는 결과가 전혀 나오지 않는다는 점을 확인했습니다:

하지만 검색 범위를 특정 주제 등으로 좁히면 원하는 결과를 찾을 수 있습니다:

처음에는 발음 기호가 있는 문자 때문인 것 같았지만, 여러 번 테스트해 본 결과 발음 기호가 없는 문자에서도 동일한 문제가 발생합니다.

두 번째로 생각한 것은 스탑워드(stop words) 때문일 수 있다는 것이었습니다. 그래서 app.yml을 수정하여 스페인어 스탑워드 사전을 잘랐습니다:

ls -l /usr/share/postgresql/13/tsearch_data/spanish.stop
-rw-r--r-- 1 root root 0 May 12 06:37 /usr/share/postgresql/13/tsearch_data/spanish.stop
                       ☝️

완전한 일치(exact matches)가 항상 검색되도록 조정할 수 있는 설정이 있을까요?

@Nacho_Caballero 님 안녕하세요

문제를 재현할 수 있는 샘플 텍스트와 검색어를 제공해 주시겠습니까? 이미지에는 확인이 되지만, 발췌된 부분만 보입니다.

Alan, 감사합니다.

해당 게시글의 내용은 다음과 같습니다:

En efecto, no se usa después del “pienso que” porque lo que estás afirmando que piensas, se trata de una realidad, y no de una posibilidad.

Por otro lado, utilizamos subjuntivo cuando utilizamos esta misma estructura, pero en negativo: “No pienso que haya mucha gente en el mercado hoy”.

Espero que esto responda a tu respuesta, pero si necesitas más detalles, por favor dime, y con gusto te ayudaré.

¡Saludos! :smiley:

그러나 여기서 해당 동작을 재현하려면 로케일을 스페인어로 설정하고 사전(디셔너리)을 잘라내야 합니다. :sweat_smile:

로컬에서 실행 중인 개발용 Discourse 사이트에서 테스트해 보았지만 동작을 재현할 수 없었습니다. 다만 사이트가 사실상 비어 있는 상태이기 때문이라고 생각합니다. 게시글이 많이 쌓여야(현재 약 68K개) 이 문제가 발생한다고 봅니다.

Postgres 사전과 관련된 다른 시도도 해볼 수 있지만, 개발용 설치 환경에서 Docker 이미지에 진입하는 방법을 모르겠습니다. launcher enter app에 해당하는 명령어가 있나요?

이상적으로는 stopwords(무의미한 단어)를 무시할 수 있는 방법이 있으면 좋겠습니다. 예를 들어, 메시지 내의 이 문장을 검색하는 경우처럼요:

@Nacho_Caballero , 안녕하세요, 현재 Discourse에서 어떤 검색 알고리즘을 사용 중인지 알려주실 수 있을까요? 문제를 조사하는 데 도움이 될 것 같습니다.

감사합니다, Yashi.

Discourse가 기본적으로 Postgres의 풀텍스트 검색 알고리즘을 사용한다고 가정합니다. 따옴표를 사용할 때(스텔밍 없이, 스탑워드 무시 없이) 정확한 매치를 제공하려면 ‘simple’ 사전을 사용하는 것이 유일한 방법이라고 생각합니다. :thinking:

감사합니다, @Nacho_Caballero.

Postgres의 전체 텍스트 알고리즘을 살펴볼게요.

완전 일치 검색이 가능한가요?

예시:

현재 "flow"를 검색하면 "flower"가 가장 높은 관련성으로 반환되는 문제가 있습니다.

따옴표를 사용하여 검색해 보세요. 예를 들어, flow 대신 "flow"로 검색하는 방식입니다.