인덱스/검색 분석
원본 보기인덱스/검색 분석
텍스트 분석은 두 시점에 일어납니다.
- 인덱스 시점
- 문서가 인덱싱될 때 모든
text필드 값이 분석됩니다. - 검색 시점
-
text필드에 전문 검색을 실행하면 쿼리 문자열(사용자가 검색하는 텍스트)이 분석됩니다. 검색 시점은 쿼리 시점이라고도 합니다.검색 시점의 텍스트 분석에 대한 자세한 내용은 검색 중 텍스트 분석을 참고하세요.
각 시점에 사용되는 분석기, 즉 분석 규칙의 집합을 각각 인덱스 분석기, 검색 분석기라고 부릅니다.
대부분의 경우 인덱스 시점과 검색 시점에 같은 분석기를 사용해야 합니다. 그래야 필드의 값과 쿼리 문자열이 동일한 형태의 토큰으로 변환됩니다. 결과적으로 검색 시 토큰이 기대한 대로 일치하게 됩니다.
어떤 문서가 text 필드에 다음 값을 담아 인덱싱됩니다.
The QUICK brown foxes jumped over the dog!
해당 필드의 인덱스 분석기가 값을 토큰으로 변환하고 정규화합니다. 이 경우 각 토큰은 하나의 단어를 나타냅니다.
[ quick, brown, fox, jump, over, dog ]
이 토큰들이 인덱싱됩니다.
이후 사용자가 같은 text 필드에서 다음을 검색합니다.
"Quick fox"
사용자는 이 검색이 앞서 인덱싱된 문장 The QUICK brown foxes jumped over the dog!에 매칭되기를 기대합니다.
하지만 쿼리 문자열에는 문서 원문에 사용된 단어가 그대로 들어 있지 않습니다.
Quick대QUICKfox대foxes
이를 감안해 쿼리 문자열도 같은 분석기로 분석됩니다. 이 분석기는 다음 토큰을 만들어냅니다.
[ quick, fox ]
검색을 실행하기 위해 Elasticsearch는 이 쿼리 문자열 토큰을 text 필드에 인덱싱된 토큰과 비교합니다.
| 토큰 | 쿼리 문자열 | text 필드 |
|---|---|---|
quick |
X | X |
brown |
X | |
fox |
X | X |
jump |
X | |
over |
X | |
dog |
X |
필드 값과 쿼리 문자열이 같은 방식으로 분석되었기 때문에 비슷한 토큰이 생성되었습니다. 토큰 quick과 fox는 정확히 일치합니다. 따라서 검색은 사용자의 기대대로 "The QUICK brown foxes jumped over the dog!"가 포함된 문서에 매칭됩니다.
흔하지는 않지만 인덱스 시점과 검색 시점에 서로 다른 분석기를 쓰는 것이 타당한 경우도 있습니다. 이를 위해 Elasticsearch에서는 별도의 검색 분석기를 지정할 수 있습니다.
일반적으로 별도의 검색 분석기는 필드 값과 쿼리 문자열에 동일한 형태의 토큰을 사용할 경우 예상 밖이거나 관련 없는 검색 결과가 나오는 상황에서만 지정해야 합니다.
Elasticsearch로 주어진 접두사로 시작하는 단어만 매칭하는 검색 엔진을 만든다고 합시다. 예를 들어 tr로 검색하면 tram이나 trope는 나와야 하지만 taxi나 bat은 절대 나오면 안 됩니다.
검색 엔진의 인덱스에 문서 하나가 추가되고, 이 문서의 text 필드에는 그런 단어 하나가 들어 있습니다.
"Apple"
해당 필드의 인덱스 분석기가 값을 토큰으로 변환하고 정규화합니다. 이 경우 각 토큰은 그 단어가 가질 수 있는 접두사를 나타냅니다.
[ a, ap, app, appl, apple]
이 토큰들이 인덱싱됩니다.
이후 사용자가 같은 text 필드에서 다음을 검색합니다.
"appli"
사용자는 이 검색이 appliance나 application처럼 appli로 시작하는 단어만 매칭하기를 기대합니다. apple에는 매칭되면 안 됩니다.
그런데 이 쿼리 문자열을 인덱스 분석기로 분석하면 다음 토큰이 생성됩니다.
[ a, ap, app, appl, appli ]
Elasticsearch가 이 쿼리 문자열 토큰을 apple에 대해 인덱싱된 토큰과 비교하면 여러 건이 일치합니다.
| 토큰 | appli |
apple |
|---|---|---|
a |
X | X |
ap |
X | X |
app |
X | X |
appl |
X | X |
appli |
X |
즉 검색이 apple에 잘못 매칭됩니다. 그뿐 아니라 a로 시작하는 모든 단어에 매칭됩니다.
이를 바로잡으려면 해당 text 필드에 사용되는 쿼리 문자열용으로 다른 검색 분석기를 지정하면 됩니다.
이 경우 접두사 집합이 아니라 토큰 하나만 생성하는 검색 분석기를 지정할 수 있습니다.
[ appli ]
이 쿼리 문자열 토큰은 appli로 시작하는 단어의 토큰에만 매칭되므로 사용자의 검색 기대에 더 잘 부합합니다.