2017-08-20 10 views
0

マップを持つbinをデータ型として使用し、MAPKEYSでセカンダリを作成しました。今私は、MAPKEYSインデックスのフィルターでudfを実行したい。エラーAEROSPIKE_ERR_INDEX_NOT_FOUNDが返されます。MAPKEYSインデックスでストリームUDFを使用できません。

これは私のAQLクエリである:
AQL>集計test.check_password( 'HII')PIDSの= 'TEST2' エラーMAPKEYSでtest.userに:(201)AEROSPIKE_ERR_INDEX_NOT_FOUND

正常クエリに対し
AQL> SELECT * FROM PIDSの=「test2は」
戻っていくつかのデータのテストのために挿入さ

サンプル・データMAPKEYSでtest.userからは、理想的な場合には、

オブジェクトにStringの地図になります動作します

enter image description here

+0

サンプルレコードを共有できますか? select * from test.userのいずれか? – pgupta

+0

@pgupta - サンプルレコード – Devuser

答えて

2
aql> INSERT INTO test.user (PK, pids, test2, test1) VALUES ('k1', MAP('{"test1": "t1", "test2": "t2", "test3":"t3", "test4":"t4", "test5":"t5"}'), "t2bin", "t1bin") 
aql> INSERT INTO test.user (PK, pids, test2, test1) VALUES ('k2', MAP('{"test1": "t1", "test3":"t3", "test4":"t4", "test5":"t5"}'), "t2b", "t1b") 
aql> INSERT INTO test.user (PK, pids, test2, test1) VALUES ('k3', MAP('{"test1": "t1", "test2":"t22", "test4":"t4", "test5":"t5"}'), "t2b", "t1b") 

aql> CREATE MAPKEYS INDEX pidIndex ON test.user (pids) STRING 
OK, 1 index added. 

aql> select * from test.user in MAPKEYS where pids="test2" 
+--------------------------------------------------------------------------------+---------+---------+ 
| pids                   | test2 | test1 | 
+--------------------------------------------------------------------------------+---------+---------+ 
| MAP('{"test2":"t22", "test4":"t4", "test5":"t5", "test1":"t1"}')    | "t2b" | "t1b" | 
| MAP('{"test2":"t2", "test3":"t3", "test4":"t4", "test5":"t5", "test1":"t1"}') | "t2bin" | "t1bin" | 
+--------------------------------------------------------------------------------+---------+---------+ 

私は1つは、そのマップ(K2)でTEST2キーを持っていなかった、あなたの形式で3つのレコードを挿入します。私はその後、MAPKEY上のセカンダリインデックスを作成し、クエリを実行し、私に希望の結果を与えました。

AGGREGATEは、この結果セットのレコードに対してストリームをユーザー定義関数で実行するために使用されます。実行したいUDFコードとは何ですか?

(AGGREGATEのtest.check_password(「HII」)......あなたは文字列引数を取るcheck_password()関数を持っているtest.luaファイルを持っている意味。)

あなたがセカンダリインデックスを作成する必要があります最初にMAPキーを押します。報告インデックスが見つかりません。インデックスがあるかどうかを確認するには、次のようにします。

aql> show indexes 
+--------+--------+-----------+--------+-------+------------+--------+------------+----------+ 
| ns  | bin | indextype | set | state | indexname | path | sync_state | type  | 
+--------+--------+-----------+--------+-------+------------+--------+------------+----------+ 
| "test" | "pids" | "MAPKEYS" | "user" | "RW" | "pidIndex" | "pids" | "synced" | "STRING" | 
+--------+--------+-----------+--------+-------+------------+--------+------------+----------+ 
1 row in set (0.000 secs) 
OK 
+0

で質問を更新しましたMAPKEYSにインデックスがありますが、javaclientを使用しているのに対し、udfを使用してaqlから実行するとAEROSPIKE_ERR_INDEX_NOT_FOUNDが表示されます。 MAPKEYSを使った単純な選択も機能しています。 – Devuser

+0

あなたのサーバーのバージョンは?あなたは私が上記のことを繰り返すことができるはずです。 – pgupta

+0

fk-3p-aerospike-server-3.12.0はバージョン – Devuser