[英]Is it possible to use primary key along with secondary key in Aerospike for fetching a record?
是否可以使用主鍵和輔助鍵。 我想根據主鍵獲取所有記錄,然后對其應用二級索引? 這是正確的方法還是應該使用其他方法?
我有一個帶主鍵的垃圾箱。 一旦我使用主鍵獲取記錄,我只想獲取記錄的子集。 下面是記錄示例。 還有沒有更好的方法來組織記錄? 比如以經理、主管等人員為key,然后查詢。
{
"name" : "test",
"companyName" : "company1",
"details" : [{
"salary" : 1000,
"designation" : "manager"
},
{
"salary" : 2000,
"designation" : "supervisor"
},
{
"staff" : 500,
"designation" : "otherStaff"
}]
}
在包含主要搜索數據的 bin 上使用二級索引查詢,然后使用謂詞過濾器進一步 select 返回的記錄。 示例構造 - 記錄在命名空間測試中具有國家和城市箱,設置測試集,二級索引 = 國家/地區的相等字符串。
// Java statement
Record record = null;
Statement stmt = new Statement();
stmt.setSetName("testset");
stmt.setNamespace("test");
stmt.setIndexName("country_idx");
stmt.setFilter(Filter.equal("country","USA"));
//Additional Predicate Filtering
stmt.setPredExp(
PredExp.stringBin("city"),
PredExp.stringValue(".*Diego"),
//prefix-suffix match: prefix.*suffix, ignore case or newline
PredExp.stringRegex(RegexFlag.ICASE | RegexFlag.NEWLINE)
);
如果您可以先按主鍵查詢,那絕對是有益的。 這將非常有效,因為請求將落在單個節點上(而不是在二級索引查詢的情況下的所有節點)。 在那個節點上,主鍵索引查找會很快。
當您說二級索引時,看起來您的要求是對數據進行額外的過濾。 如果我的理解是正確的,您可以使用Map API來獲取您明確查找的鍵(或值)。 為此,您可能需要相應地調整數據 model。 在您的示例中,如果您要獲取不同的薪水,您可能應該創建薪水的 map(而不是“薪水”作為地圖中的鍵)。 像這樣的東西:
{
"name" : "test",
"companyName" : "company1",
"salaries" : {
"manager" : 1000,
"supervisor" : 2000,
"otherStaff" : 500
}
}
然后,您可以使用getByKeyList()
map API 通過指定您感興趣的鍵(在地圖中)(例如“經理”和“其他員工”)來獲取多個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.