我已经在elasticsearch中索引了titan数据,它运行良好并且已编入索引,但是当我使用REST API查看elasticsearch中的数据时。列/属性名称与Titan不同。
例如,我在向Titan插入数据时索引了年龄
final PropertyKey age = mgmt.makePropertyKey("age").dataType(Integer.class).make();
mgmt.buildIndex("vertices",Vertex.class).addKey(age).buildMixedIndex(INDEX_NAME);
如果我在elasticsearch中看到相同的话
{
"_index" : "titan",
"_type" : "vertices",
"_id" : "sg",
"_score" : 1.0,
"_source":{"6bp":30}
},
查看我能理解的数据“6bp”是年龄。这个转换是如何完成的?我该如何解码呢?
我的目标是在ElasticSearch上向Titan索引插入数据。用户查询应使用ElasticSearch客户端搜索ElasticSearch,因为我们需要ElasticSearch支持的更多搜索功能,如果搜索数据,则使用Titan查询获取相关结果。
答案 0 :(得分:2)
字段名称为长编码。您可以使用此类
进行反向编码com.thinkaurelius.titan.util.encoding.LongEncoding
或者,如果可以使用它,更好的选择是使用字段映射显式指定搜索字段名称:
默认情况下,Titan将对属性键进行编码,以便为混合索引中的属性键生成唯一的字段名称。如果想要在外部索引后端直接查询混合索引,则后端很难处理并且难以辨认。对于此用例,可以通过参数显式指定字段名称。
mgmt = g.getManagementSystem()
name = mgmt.makePropertyKey('bookname').dataType(String.class).make()
mgmt.buildIndex('booksBySummary',Vertex.class).addKey(name,com.thinkaurelius.titan.core.schema.Parameter.of('mapped-name','bookname')).buildMixedIndex("search")
mgmt.commit()
http://s3.thinkaurelius.com/docs/titan/0.5.1/index-parameters.html#_field_mapping