텍스트 검색의 동작
Object Explorer, Workshop과 Functions API의 텍스트 검색은 문자열을 검색 토큰으로 처리하는 분석기(analyzer)를 사용합니다. 어떤 토큰을 저장하는지는 속성의 분석기가 정하고, 그 토큰을 어떤 조건으로 조합하는지는 검색창이나 필터의 모드가 정합니다.
분석기와 토큰
기본 표준 분석기(Standard analyzer)는 공백과 구두점 경계에서 단어를 나누고 토큰을 소문자로 바꿉니다. The Quick Brown Fox는 the, quick, brown, fox로 저장됩니다. 일반 토큰 검색은 기본적으로 대소문자를 구분하지 않지만, rown은 완전한 brown 토큰과 같지 않아 일치하지 않습니다.
여러 토큰의 순서와 간격을 요구하려면 구문 검색을 사용합니다. 따옴표 없는 검색어의 AND 또는 OR 결합은 사용하는 검색 인터페이스에 따라 다릅니다.
| 분석기 | 처리 | 입력 예시 | 토큰 |
|---|---|---|---|
| Standard | 공백과 구두점 경계로 분리하고 소문자화 | The Quick-Brown Fox | the, quick, brown, fox |
| Simple | 문자가 아닌 지점에서 분리하고 소문자화. 숫자와 구두점은 제거 | The Quick-Brown Fox 42 | the, quick, brown, fox |
| Not analyzed | 전체 값을 토큰 하나로 보관 | The Quick-Brown Fox | The Quick-Brown Fox |
| Whitespace | 공백으로만 분리하고 대소문자 유지 | The Quick-Brown Fox | The, Quick-Brown, Fox |
| Language | 언어별 분리, 어간 처리와 불용어 제거 | 영어 Running quickly | run, quick |
Language 분석기는 english, french, german, japanese, korean, arabic, combined_arabic_english를 지원합니다. Ontology Manager의 속성 검색 구성에서 분석기를 확인하거나 변경합니다. 검색 대상 속성에는 Searchable 렌더 힌트가 필요합니다.
밑줄과 마침표
표준 분석기는 banana_pudding과 user.name의 밑줄 및 마침표를 토큰 내부 문자로 취급합니다. 각각 하나의 토큰이며 banana, pudding 또는 user, name으로 나누지 않습니다.
따라서 banana 검색은 banana_pudding 토큰과 일치하지 않습니다. banana* 같은 접두사 검색을 사용하거나 필요한 토큰화에 맞게 분석기 설정을 검토합니다.
Object Explorer 전역 검색
홈과 결과 화면의 전역 검색창은 여러 객체 유형의 검색 가능한 속성을 대상으로 합니다. 기본 결합은 OR입니다. yellow cab은 yellow 또는 cab을 찾고, "yellow cab"은 정확한 순서의 구문을 찾습니다.
전역 검색에서는 AND, OR, NOT, 괄호, 구문 따옴표, 뒤쪽 *, 문자 하나를 대신하는 ?, 유사 검색 ~를 사용할 수 있습니다. 앞쪽 와일드카드와 앞뒤를 함께 붙인 *term*은 지원하지 않습니다.
Object Explorer는 온톨로지 탐색과 개별 객체 조회를 제공하며, Insight는 이와 함께 사용할 수 있는 확장 분석 도구입니다.
탐색의 개별 문자열 속성 필터
| 모드 | 동작 |
|---|---|
| Contains | 기본 모드입니다. 모든 검색 토큰을 포함한 객체를 찾습니다. |
| Starts with | 검색어로 시작하는 토큰을 찾습니다. term*에 대응합니다. |
| Exact | 검색어 전체와 공백 위치를 정확히 비교합니다. |
| Is not | 검색 토큰을 포함한 객체를 제외합니다. |
필터는 속성 분석기가 만든 토큰을 기준으로 동작합니다. Not analyzed이면 전체 속성값이 하나의 토큰입니다. 전역 검색의 기본 OR와 속성 필터의 기본 Contains를 혼동하지 않습니다.
앞쪽 와일드카드
개별 문자열 속성의 탐색 필터에서 *smith는 Goldsmith, Blacksmith, smith처럼 해당 말로 끝나는 값을 찾습니다. *ing는 running, swimming, ing 등에 해당합니다.
사용하려면 다음 설정이 필요합니다.
- Ontology Manager에서 객체 유형과 문자열 속성을 선택합니다.
- Enable leading wildcards를 켭니다.
- Searchable도 켭니다.
- 저장한 뒤 기반 데이터 소스를 Object Storage V1(Phonograph)에 다시 인덱싱합니다. 다음 자동 재인덱싱을 기다리거나 Data sources에서 수동으로 시작할 수 있습니다.
이 설정은 전역 검색창에 앞쪽 와일드카드를 추가하는 설정이 아닙니다. *term*처럼 앞뒤를 동시에 쓰는 검색은 여전히 지원하지 않습니다.
Workshop 검색
Filter List
Filter List의 키워드 검색은 사용자가 다음 다섯 모드를 선택할 수 있습니다.
| 모드 | 동작 |
|---|---|
| All | 토큰, 와일드카드와 접두사 검색을 조합하는 가장 넓은 검색입니다. 와일드카드 비교에서는 쿼리를 분석하지 않고 인덱스 토큰과 직접 비교하므로 Not analyzed 또는 Whitespace 속성에서 동작을 예측하기 쉽습니다. |
| Any | 검색 토큰 중 하나 이상을 포함한 객체를 찾습니다. |
| Exact | 모든 토큰이 순서대로 붙어 있는 정확한 구문을 찾습니다. |
| Advanced | AND, OR, NOT, 따옴표와 괄호로 논리식을 만듭니다. |
| Regex | 속성 토큰에 정규식 패턴을 적용합니다. |
Exploration Search Bar
Workshop의 Exploration Search Bar 위젯은 Object Explorer 전역 검색창과 같은 검색 기반을 사용합니다. 구문, 논리 연산자, 지원되는 와일드카드와 유사 검색 문법을 사용할 수 있습니다.
객체 집합 필터 변수
객체 집합 필터 변수의 CONTAIN 필터는 접두사만 일치시킵니다. 값이 id000123일 때 id0001은 일치하지만 d0001은 시작 지점이 다르므로 일치하지 않습니다.
Functions API의 문자열 필터
아래 메서드는 Functions API의 TypeScript V1 문자열 필터입니다.
| 메서드 | 일치 조건 |
|---|---|
.exactMatch() | 속성값과 쿼리 문자열이 정확히 같음 |
.phrase() | 모든 토큰이 지정 순서대로 있고 사이에 다른 토큰이 없음 |
.phrasePrefix() | 구문 조건을 적용하되 마지막 토큰은 해당 문자열로 시작하는 토큰도 허용 |
.prefixOnLastToken() | 모든 토큰이 순서와 관계없이 있고 마지막 검색 토큰은 접두사 일치도 허용 |
.matchAnyToken() | 토큰 중 하나 이상이 있음 |
.matchAllTokens() | 모든 토큰이 순서와 관계없이 있음 |
.fuzzyMatchAnyToken() | matchAnyToken 조건에 편집 거리 기반 유사 일치를 허용 |
.fuzzyMatchAllTokens() | matchAllTokens 조건에 편집 거리 기반 유사 일치를 허용 |
.phrase()나 .phrasePrefix()는 banana_pudding 같은 토큰을 내부에서 나누지 않습니다. .phrase("banana")로는 그 값을 찾지 못합니다. 논리 결합에는 Filters.and(), Filters.or(), Filters.not()을 사용합니다.
검색 위치별 지원 범위
| 기능 | OE 전역 | OE 속성 필터 | Workshop Filter List | Functions API |
|---|---|---|---|---|
| 토큰 | 지원 | 지원 | 지원 | 지원 |
| 구문 | 따옴표 | 별도 구문 검색 기능 없음 | Exact | .phrase() |
| 접두사 | term* | Starts with | All | .phrasePrefix(), .prefixOnLastToken() |
| 앞쪽 와일드카드 | 미지원 | 렌더 힌트 필요 | 미지원 | 미지원 |
| 일반 와일드카드 | *, ? | 별도 일반 와일드카드 검색 미지원 | All | 미지원 |
| 유사 검색 | ~ | 미지원 | 미지원 | fuzzyMatch 메서드 |
| 논리식 | AND, OR, NOT | 키워드 필터의 결합 UI 사용 | Advanced | Filters 결합 함수 |
| 정규식 | 미지원 | 미지원 | Regex | 미지원 |
쿼리를 작성할 때 확인할 점
app은 application과 같은 토큰이 아니므로 부분 단어를 찾으려면 app* 같은 접두사 검색이 필요합니다. New York을 전역 검색창에 넣으면 new 또는 york를 찾으므로 구문이 필요하면 "New York"으로 묶습니다.
와일드카드 쿼리는 쿼리 분석기를 거치지 않습니다. 인덱스가 소문자 토큰을 사용하면 대문자가 섞인 Quick*는 일치하지 않을 수 있습니다. 토큰 하나에 직접 비교하므로 a search term*처럼 공백이 있는 여러 단어의 와일드카드 쿼리도 일치하지 않습니다. 여러 단어를 가로지르는 부분 일치가 필요하면 Contour나 Workshop의 Regex 모드를 검토합니다.