쿼리 선택기 구문
IBM Cloudant 조회 언어는 원하는 문서에 대해 설명하는 JSON 오브젝트로 표현됩니다. 이 구조 내에서는 특히 이름 지정된 필드를 사용하여 조건부 로직을 적용할 수 있습니다.
IBM Cloudant 조회 언어에는 몇 가지 MongoDB 조회 문서와의 유사점이 존재하지만 이러한 유사성은 목적의 공통성에서 기인하는 것이며 반드시 기능 또는 결과의 등가성으로 이어지는 것은 아닙니다.
선택기 기본사항
기본 선택기 구문을 사용하려면 하나 이상의 필드 및 해당 필드에 필요한 값을 지정해야 합니다. 다음 선택기 예제에서는 director 값이 포함된 Lars von Trier 필드가 있는 모든 문서를 일치시킵니다.
다음과 같이 단순 선택기 예제를 참조하십시오.
{
"selector": {
"director": "Lars von Trier"
}
}
인덱스가 작성될 때 "type":"text"를 지정하여 전체 텍스트 인덱스를 작성한 경우 $text 연산자를 사용하여 일치하는 문서를 선택할 수 있습니다. 다음 예제에서는 전체 텍스트 인덱스를 검사하여 Bond라는 단어가 포함된 문서를 찾습니다.
다음과 같이 full_text 인덱스에 대한 단순 선택기 예제를 참조하십시오.
{
"selector": {
"$text": "Bond"
}
}
연산자를 결합하여 더 복잡한 선택기 표현식을 작성할 수 있습니다. 하지만 유형이 json인 IBM Cloudant 조회 인덱스의 경우 "조합" 또는 "배열 논리" 연산자(예: $regex)를 조회의 basis로 사용할 수 없습니다.
$eq 와 같은 등호 연산자만 해당됩니다,
$gt,
$gte,
$lt, 및 $lte ( $ne 제외 )를 더 복잡한 쿼리의 기초로 사용할 수 있습니다. 복합 선택기 표현식을 작성하는 방법에 대한 자세한 정보는 선택기 표현식 작성을 참조하십시오.
두 개의 필드가 포함된 선택기
다음 예제에서 선택기는 name이 포함된 Paul 필드 및 "Boston" 값이 포함된 location 필드가 있는 문서를 일치시킵니다.
다음과 같이 더 복잡한 선택기 예제를 참조하십시오.
{
"selector": {
"name": "Paul",
"location": "Boston"
}
}
서브필드
더 복잡한 선택기를 사용하여 중첩 오브젝트 필드 또는 서브필드에 대한 값을 지정할 수 있습니다. 예를 들어 필드 및 서브필드를 지정하기 위해 표준 JSON 구조를 사용할 수 있습니다.
다음과 같이 JSON 오브젝트 내에 있는 필드 및 서브필드 선택기 예제를 참조하십시오.
{
"selector": {
"imdb": {
"rating": 8
}
}
}
축약된 등가에서는 점 표기법을 사용하여 필드 및 서브필드 이름을 하나의 이름으로 결합합니다.
다음과 같이 점 표기법을 사용하는 등가 필드 및 서브필드 선택기 예제를 참조하십시오.
{
"selector": {
"imdb.rating": 8
}
}
더 복잡한 선택자 표현식 구축
일반적으로 인수를 사용하는 연산자가 존재하는 경우 해당 인수 자체가 인수를 소유한 다른 연산자가 될 수 있습니다. 이 확장을 통해 더 복잡한 선택기 표현식을 사용할 수 있습니다.
조합 또는 배열 논리 연산자(예: $regex)를 사용하는 경우 JSON 유형의 인덱스 사용 시 전체 데이터베이스를 스캔하여 성능이 저하될 수 있습니다. $eq 와 같은 등호 연산자만 가능합니다,
$gt, $gte, $lt, $lte ( $ne 제외 )에서 인덱스 조회를 활성화합니다. 인덱스가 효율적으로 사용되도록 하려면 각각의 조회에 대한 플랜 설명을 분석하십시오.
대부분의 선택기 표현식은 정확하게 연산자에 대해 예상되는 대로 작동합니다.
$regex 연산자가 사용하는 매칭 알고리즘은 현재 다음을 기반으로 합니다
Perl 호환 정규식(PCRE)라이브러리를 기반으로 합니다. 하지만 일부 PCRE 라이브러리는 구현되어 있지 않습니다. 또한 $regex 연산자의 일부는 PCRE에서 제공되는 항목을 초과합니다. 구현된
내용에 대한 자세한 내용은
erlang 정규식 정보를 참조하세요.
$text 연산자 사용
$text 연산자는 표준 분석기를 사용한 Lucene 검색을 기반으로 합니다. 이 연산자는 대소문자를 구분하지 않으며 모든 단어에 대해 일치시킵니다. 하지만 $text 연산자에서는 와일드카드, 부분 일치 또는 근접 일치와 같은 일부 Lucene 구문이 지원되지 않습니다.
자세한 정보는 검색 문서를 참조하십시오.
$text 연산자는 문서에 있는 모든 문자열에 적용됩니다. 이 연산자를 필드 이름의 컨텍스트에 배치하는 경우 해당 연산자가 유효하지 않습니다.