Luceneインデックスinet mapperは、CQLのinetデータ型をマップするためのものです。唯一の利点は、解析をより柔軟にすることです。
SELECT * FROM t WHERE expr(i, '{filter:{type:"match", field:"address", value: "::ffFF:8:8:8"}}');
SELECT * FROM t WHERE expr(i, '{filter:{type:"match", field:"address", value: "::0:ffff:8:8:8"}}');
SELECT * FROM t WHERE expr(i, '{filter:{type:"match", field:"address", value: "0:0:0:0:ffff:8:8:8"}}');
しかし、同じクエリ文字列マッパーでは動作しないだろう:
SELECT * FROM t WHERE expr(i, '{filter:{type:"match", field:"address_s", value: "::ffFF:8:8:8"}}');
SELECT * FROM t WHERE expr(i, '{filter:{type:"match", field:"address_s", value: "::0:ffff:8:8:8"}}');
SELECT * FROM t WHERE expr(i, '{filter:{type:"match", field:"address_s", value: "0:0:0:0:ffff:8:8:8"}}');
SELECT * FROM t WHERE expr(i, '{filter:{type:"wildcard", field:"address_s", value: "*:8:8:8"}}');
CREATE TABLE t (
pk int PRIMARY KEY,
address inet
) ;
CREATE CUSTOM INDEX i ON t()
USING 'com.stratio.cassandra.lucene.Index'
WITH OPTIONS = {
'refresh_seconds': '1',
'schema': '{
fields : {
address : {type: "inet"},
address_s : {type: "string", column: "address"}
}
}'};
INSERT INTO t(pk, address) VALUES (0, '::FFFF:8:8:8');
これらのすべてのクエリがインデックス行を見つけます。たとえば、以下のデータが与えられます
生成されたLuceneフィールドは文字列フィールドなので、IPアドレスの拡張形式を使用する必要があるワイルドカードまたは範囲クエリの特別な処理はなく、辞書編集ヒカルの行動:
SELECT * FROM t WHERE expr(i, '{filter:{type:"wildcard", field:"address", value: "*:8:8:8"}}');
SELECT * FROM t WHERE expr(i, '{filter:{type:"range", field:"address", lower: "::FFFF:8:8:7"}}');