elasticsearch 泰坦索引与弹性搜索。字符串匹配问题,elasticsearch,titan,tinkerpop3,elasticsearch,Titan,Tinkerpop3" /> elasticsearch 泰坦索引与弹性搜索。字符串匹配问题,elasticsearch,titan,tinkerpop3,elasticsearch,Titan,Tinkerpop3" />

elasticsearch 泰坦索引与弹性搜索。字符串匹配问题

elasticsearch 泰坦索引与弹性搜索。字符串匹配问题,elasticsearch,titan,tinkerpop3,elasticsearch,Titan,Tinkerpop3,我在和泰坦合作时遇到了一些麻烦。我的索引配置如下: TitanGraph graph = TitanFactory.open("conf/titan-cassandra-es.properties"); TitanManagement management = graph.openManagement(); String indexKey = "byItemIdentifier"; String propertyKey = "ITEM_IDENTIFIER"; TitanIndex index

我在和泰坦合作时遇到了一些麻烦。我的索引配置如下:

TitanGraph graph = TitanFactory.open("conf/titan-cassandra-es.properties");
TitanManagement management = graph.openManagement();
String indexKey = "byItemIdentifier";
String propertyKey = "ITEM_IDENTIFIER";
TitanIndex index = management.getGraphIndex(indexKey);
PropertyKey key = management.makePropertyKey(propertyKey).dataType(String.class).make();
management.buildIndex(indexKey, Vertex.class).addKey(key, Mapping.STRING.asParameter()).buildMixedIndex("search");
management.commit();
现在的问题是:

Vertex vertex = graph.addVertex();
vertex.property(propertyKey, "www.foo.com/bar");
graph.commit();
然后,稍后我尝试以下方法:

graph.traversal().V().has(propertyKey, "foo").hasNext(); //(1)
graph.traversal().V().has(propertyKey, "bar").hasNext(); //(2)
graph.traversal().V().has(propertyKey, "www.foo.com/bar").hasNext(); //(3)

(1)=
(2)=
(3)=
。这是怎么发生的?当然(3)应该返回
true
?我是不是弄错了什么

首先,在创建索引之后,应该等待它从“已安装”变为“已注册”。这种方法将有助于:

// Block until the SchemaStatus transitions from INSTALLED to REGISTERED
ManagementSystem.awaitGraphIndexStatus(graph, vertices_index).status(SchemaStatus.REGISTERED).call();
这将阻止您的代码,直到您的索引后端创建它

其次,如果图形中已经有一些数据,则必须重新为属性编制索引,以便索引后端(Elasticsearch等)能够知道它。使用以下Java方法:

public static void reindexGraph(TitanGraph graph, String myIndex) throws InterruptedException {
    TitanManagement management = graph.openManagement();
    TitanGraphIndex index = management.getGraphIndex(myIndex);
    management.updateIndex(index, SchemaAction.REINDEX);
    management.commit();

    // Enable the index
    ManagementSystem.awaitGraphIndexStatus(graph, myIndex).status(SchemaStatus.ENABLED).call();
    graph.tx().commit();
}

这不是你问题的答案,但你真的需要混合索引吗?您可以使用Titan的内部复合索引进行相等性测试。就个人而言,由于这个问题,我已经尽力避免使用混合索引。@Ralf现在我已经改为使用复合索引,这就足够了。谢谢你指出这个问题。