我在嵌入模式下运行Titan 0.3.2,并且能够通过Gremlin shell(see previous question)创建和查询ElasticSearch索引。我使用默认配置,它调用ES索引“搜索”。
这些搜索通过Gremlin shell返回正确的节点而没有错误:
g.query().has('my_label','abc').vertices()
g.query().has('my_label',CONTAINS,'abc').vertices()
但是,如果我尝试通过RexPro运行这些相同的Gremlin查询,Rexster会针对上面的第一个查询发回此错误:
java.util.concurrent.ExecutionException:
javax.script.ScriptException:
javax.script.ScriptException:
java.lang.IllegalArgumentException: Index is unknown or not configured: search
这是第二次:
java.util.concurrent.ExecutionException:
javax.script.ScriptException:
javax.script.ScriptException:
groovy.lang.MissingPropertyException: No such property: CONTAINS for class: Script3
同样,如果我尝试通过REST API(GET)查询索引键:
http://localhost:8182/graphs/graph/vertices?key=my_key&value=abc
我收到相同的错误回复:
{"message":"Index is unknown or not configured: search","error":"Index is unknown or not configured: search"}
最后,如果我尝试从干净的数据库开始并通过rexpro运行索引创建脚本:
g.makeType().name("my_label").dataType(String.class).indexed("search", Vertex.class).unique(Direction.OUT).makePropertyKey();
我看到同样的未知索引错误:
java.util.concurrent.ExecutionException:
javax.script.ScriptException:
javax.script.ScriptException:
java.lang.IllegalArgumentException: Index is unknown or not configured: search
因此,似乎Rexster需要一些关于索引后端的其他信息,可能在其配置文件中(我使用安装中包含的默认值)。有谁熟悉这个问题?很高兴提供更多信息。
答案 0 :(得分:2)
你可能会发生各种各样的事情,但主要的是从Titan 0.3.2开始,Rexster不会自动导入Titan类,因此你无法使用CONTAINS
进行查询。这样做时需要指定完整的包名称:
com.thinkaurelius.titan.core.attribute.Text.CONTAINS
我不能确定还有什么问题,但看起来弹性搜索索引配置不正确。这与Titan Server的Rexster配置文件没有多大关系。它更多地与传递给titan.sh
的第二个参数有关,后者包含Titan配置信息。确保正确配置弹性搜索,因为此处显示的文件(默认为安装):https://github.com/thinkaurelius/titan/blob/master/config/titan-server-cassandra-es.properties