Indexing 如何在titan 1.0中使用tinkerpop API 3在复合索引上进行不区分大小写的搜索

Indexing 如何在titan 1.0中使用tinkerpop API 3在复合索引上进行不区分大小写的搜索,indexing,composite,titan,Indexing,Composite,Titan,我在titan 1.0中创建了一个属性的综合索引。现在我想对该属性进行不区分大小写的搜索 正在创建的复合索引如下所示: TitanManagement mgmt = graph.openManagement(); TitanManagement.IndexBuilder nameIndexBuilder = mgmt.buildIndex("name_comp_idx", Vertex.class).addKey("name"); titanGraphIndex = nameIndexBui

我在titan 1.0中创建了一个属性的综合索引。现在我想对该属性进行不区分大小写的搜索

正在创建的复合索引如下所示:

TitanManagement mgmt = graph.openManagement();

TitanManagement.IndexBuilder nameIndexBuilder = mgmt.buildIndex("name_comp_idx", Vertex.class).addKey("name");

titanGraphIndex = nameIndexBuilder.buildCompositeIndex();
顶点:

TitanVertex vertex= graph.addVertex(T.label, "company");
        entity.property("name", "APPLE");
下面的查询用于使用Tinkerpop API 3搜索titan图

graph.traversal().V().has("name", "apple").toList()
但是没有返回结果


谁能告诉我如何在titan复合索引上进行不区分大小写的搜索?有没有其他方法可以达到同样的效果?

如Titan文档中所述,用于精确匹配

一种选择是将属性存储两次,一次使用实值,一次使用小写值。这里有几种方法可以做到这一点:

mgmt = graph.openManagement()
// store the property twice, once with the real value, once with a lowercased value
// for name, we're using different property names
name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SINGLE).make()
nameLower = mgmt.makePropertyKey('nameLower').dataType(String.class).cardinality(Cardinality.SINGLE).make()
nameLowerIndex = mgmt.buildIndex('nameLowerIndex', Vertex.class).addKey(nameLower).buildCompositeIndex()
// for title, we're using a list
title = mgmt.makePropertyKey('title').dataType(String.class).cardinality(Cardinality.LIST).make()
titleListIndex = mgmt.buildIndex('titleListIndex', Vertex.class).addKey(title).buildCompositeIndex()
mgmt.commit()

v = graph.addVertex()
h = 'HERCULES'
v.property('name', h)
v.property('nameLower', h.toLowerCase())
t = 'GOD'
v.property('title', t)
v.property('title', t.toLowerCase())
graph.tx().commit()

g.V(v).valueMap()
g.V().has('nameLower', 'hercules').values('name')
// within predicate is defined in org.apache.tinkerpop.gremlin.process.traversal.P
g.V().has('title', within('god')).values('title').next()
另一种选择是使用带有
Mapping.TEXT
的混合索引和文本谓词,但要注意与之相关的gotchas

// Full-text search
mgmt = graph.openManagement()
name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SINGLE).make()
nameIndex = mgmt.buildIndex('nameIndex', Vertex.class).addKey(name).buildMixedIndex('search')
mgmt.commit()

v = graph.addVertex()
v.property('name', 'HERCULES')
graph.tx().commit()

// wait for a moment
Thread.sleep(n)
// text predicates are defined in com.thinkaurelius.titan.core.attribute.Text
// import static com.thinkaurelius.titan.core.attribute.Text.*
g.V().has('name', textContains('hercules')).values('name')