Primary Key search

primary
key
index
secondary
query

#1

Hello,

I’m tryingo to create a primary Key query with java client.

If I have this set:

±—±-----------+ | id | name | ±—±-----------+ | 3 | “jose” | | 1 | “david” | | 2 | “luis” |

With PK equasl id field . I can do the next query in aql

select * from test.tabletest where PK = ‘1’

and aql shows me

| id | name | ±—±----------+ | 1 | “david” | ±—±----------+

I want to make the same with java. I had tryed to create a filter like this:

com.aerospike.client.query. Filter.equal(“PK”,“1”)); but when I am executing the nex method in aeropike recordSet the method throws the follow exception:

com.aerospike.client.AerospikeException: Error Code 204: Index error

Anybody can help me.

Thanks.


#2

It looks like 1 is a long in your table not a string. Try Filter.equal(“PK”, 1).


#3

But by the error message it looks like you haven’t indexed the field you are querying on.


#4

I don’t believe filters work on the primary key either, so you’ll have to create a second field that contains the data of the primary key again and index it.


Limited to 3 posts per topic, so continuing my post here…

For my use case I needed to do a range based query on our primary key. So we had to create a second field to do the range based query on. The simple equals case as was mentioned works by just doing a direct access with the key.


#5

I can’t create a secondary index for each table PK. My problem is the limiatation of the number of secondary index (only 256). In my use case I can’t detreminate the table number because is a generic solution.

Thank you for you fast answer.


#6

Aerospike is a key-value store so if you’re storing it with that primary key, you just get it with that primary key.

You don’t need to perform a query, that’s only used for selecting multiple records that match a secondary index or a UDF method.

Just get the record you want directly by the key in the driver you’re using.


#7

Hi Jose

In AQL you would use the following to ‘select’ using the primary key:

		SELECT bn2,bn3,bn4  FROM test.demo WHERE PK = '10'

Here is the equivalent code using the Java client

	Record record = client.get(policy, new Key("test", "demo", "10"), "bn2", "bn3", "bn4");

I hope this helps