Couchbase ServerはUnicodeの照合順序アルゴリズムを文字の順序付けのために使用しているので、これがどのように機能するかを知っておくべきです。ほとんどの開発者は一般的にASCIIにあるようなバイト順を使用しており、この順序はほとんどのプログラミング言語で文字列を順序付けするために文字列の比較で使用されます。
ASCIIのようなバイト順で利用される優先順を次に示します:
123456890 < A-Z < a-z
これは、整数で始まるアイテムが文字で始まるアイテムの前に現れ、大文字で始まるアイテムが小文字で始まるアイテムの前に現れるということを意味しています。 これは、"Apple"という名前のアイテムが"apple"の前に現れ、"Zebra" というアイテムが"apple"の前に現れるということを意味します。これをCouchbaseサーバで使用されているUnicode照合順序を使用した優先順と比較すると:
123456790 < aAbBcCdDeEfFgGhH...
整数で始まるアイテムが文字列で始まるアイテムの前に現れることに再度注意してください。しかし、この場合には、同じ文字の大文字、小文字とは一緒にグループ化されています。これは、つまり"apple"が"Apple"の前に、そして"Zebra"の前にも現れるということを意味します。また、アクセント付き文字もこの順序に従うことに注意してください:
a < a < A < A < b
これは、"a"とその文字のアクセント付き文字で始まるすべてのアイテムが"A"とその文字のアクセント付き文字の前に出現するということを意味します。
順序の例
バイト順では、インデックスのキーは次のように現れます:
"ABC123" < "ABC223" < "abc123" < "abc223" < "abcd23" < "bbc123" < "bbcd23"
同じアイテムがUnicode照合順序のCouchbase Serverによってこのように並べられます:
"abc123" < "ABC123" < "abc223" < "ABC223" < "abcd23" < "bbc123" < "bbcd23"
これはstartkey
とendkey
で結果の範囲を戻してもらうようなCouchbase Serverへの問い合わせを理解するために特に重要です。バイト順で取得するアイテムはUnicode照合順序によって比較されたアイテムと異なります。順序付けの結果についての詳細は、「部分的な選択とキー範囲」を参照してください。
順序および問い合わせの例
この次の例ではCouchbase ServerでのUnicode照合順序と、startkey
とendkey
が返すクエリ結果への影響についてデモします。Couchbase Server 2.0で提供されているbeer-sample
データベースに基づきます。詳細については、「Beer Sampleバケット」を参照してください。
大文字のYで始まる名前のすべてのビール醸造所を取得したいと仮定し、クエリパラメータとして次のように指定します:
startkey="Y"&endkey="z"
小文字のyまたは大文字のYで始まるビール醸造所を取得したい場合、次のようにクエリを提供します:
startkey="y"&endkey="z"
これは小文字のYから始まるすべての名前とアイテムを返しますが、小文字のzを含まず、それによって同様に大文字のYは含まれます。小文字のyから名前が始まるビール醸造所のみを取得するには、大文字のYで範囲を終了します:
startkey="y"&endkey="Y"
たまたま、小文字のyから始まる醸造所のビールはないので、サンプルデータベースは結果を含みません。Unicode照合順序についてより深く学びたい場合、次の資料を参照してください:Unicode Technical Standard #10とICU User Guide, Customization, Default Options