我的机器上安装了aerospike server v 3.8.3,我尝试在aql中使用以下命令创建索引:
aql> CREATE INDEX indexA ON namespace.setA(binA) STRING
以下是aql> show indexes
命令
+----------------+--------+------------+---------+-------+------------+-------+------------+------------+
| ns | bin | indextype | set | state | indexname | path | sync_state | type |
+----------------+--------+------------+---------+-------+------------+-------+------------+------------+
| "namespace" | "binA" | "NONE" | "setA" | "RW" | "indexA" | "BinB | "synced" | "STRING" |
+----------------+--------+------------+---------+-------+------------+-------+------------+------------+
spring-data-aerospike
期望使用以下bin构建索引
+----------------+-----------------+--------+----------+-------+-----------+------------+--------------+
| ns | bins | set | num_bins | state | indexname | sync_state | type |
+----------------+-----------------+--------+----------+-------+-----------+------------+--------------+
| "user_profile" | "last_activity" | "west" | 1 | "WO" | "ix1" | "synced" | "INT SIGNED" |
+----------------+-----------------+--------+----------+-------+-----------+------------+--------------
中提到了这两种格式
索引创建中存在不兼容性,我应该修复spring-data-aerospike
还是修复索引以匹配spring-data-aerospike
com/aerospike/helper/model/Index.java
第79行
/*
* Copyright 2012-2015 Aerospike, Inc.
*
* Portions may be licensed to Aerospike, Inc. under one or more contributor
* license agreements.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.aerospike.helper.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.aerospike.client.query.IndexType;
/**
* This class represents a Secondary Index
* created in the cluster.
*
* @author peter
*
*/
public class Index {
protected Map<String, String> values;
public Index(String info) {
setIndexInfo(info);
}
public String getName() {
return values.get("indexname");
}
public List<NameValuePair> getValues(){
List<NameValuePair> result = new ArrayList<NameValuePair>();
Set<String> keys = this.values.keySet();
for (String key : keys){
NameValuePair nvp = new NameValuePair(this, key, this.values.get(key));
result.add(nvp);
}
return result;
}
public void setIndexInfo(String info){
//ns=phobos_sindex:set=longevity:indexname=str_100_idx:num_bins=1:bins=str_100_bin:type=TEXT:sync_state=synced:state=RW;
if (!info.isEmpty()){
String[] parts = info.split(":");
if (values == null){
values = new HashMap<String, String>();
}
for (String part : parts){
kvPut(part, this.values);
}
}
}
private void kvPut(String kv, Map<String, String> map){
String[] kvParts = kv.split("=");
map.put(kvParts[0], kvParts[1]);
};
@Override
public String toString() {
return this.getName();
}
public String getBin() {
return values.get("bins");
}
public IndexType getType(){
String indexTypeString = values.get("type");
if (indexTypeString.equalsIgnoreCase("TEXT"))
return IndexType.STRING;
else
return IndexType.NUMERIC;
}
}
答案 0 :(得分:1)
修复spring-data-aerospike ,因为aerospike-server改变了自48f1ae5以来的行为。
在服务器(as/src/base/secondary_index.c)中响应'show indexes'的代码是:
/*
* Client API to list all the indexes in a namespace, returns list of imd with
* index information, Caller should free it up
*/
int
as_sindex_list_str(as_namespace *ns, cf_dyn_buf *db)
{
......
您可以在link。
中查看更改