2016-12-15 2 views
0

Stratio Lucene Indexプラグインのドキュメントから、INetマッパーは興味深いようですが、その背後には多くの動機がありません。 https://github.com/Stratio/cassandra-lucene-index/blob/branch-3.0.9/doc/documentation.rst#inet-mapperStratio Lucene Index 3.0.9:INetマッパーの目的

これはIPアドレス(型指定された)を表しているため、単純な文字列とは異なりますが、どのような種類のクエリを適用できますか?特に、遠隔クエリを実行することは可能ですか?

答えて

1

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"}}'); 
関連する問題