在Titan中使用索引类型进行ElasticSearch



我目前有一个在本地Cassandra后端运行Titan的虚拟机,希望能够使用ElasticSearch使用CONTAINS匹配和正则表达式对字符串进行索引。到目前为止,我拥有的是:

  • titan.sh运行后,将使用Groovy脚本从单独的顶点和边文件加载数据。这个脚本的第一阶段从Titan加载图形并设置ES属性:

    config.setProperty("storage.bendend","cassandra")config.setProperty("storage.hostname","127.0.0.1")

    config.setProperty("storage.index.a弹性后端","弹性搜索")config.setProperty("storage.index.aelastic.directory","db/es")config.setProperty("storage.index.aelastic.clientonly","false")config.setProperty("storage.index.aelastic.local mode","true")

  • 脚本的第二部分设置索引类型:

    g.makeKey("property").dataType(String.class).indexed("elastic",Edge.class").make();

  • 第三部分从CSV文件加载数据,这已经过测试,运行良好。

我的问题是,当我执行Gremlin查询时,我似乎无法使用ElasticSearch函数。例如:

g.E.has("property",CONTAINS,"test")

返回0个结果,尽管我知道此字段至少包含一次该属性的字符串"test"。更奇怪的是,当我将CONTAINS更改为ElasticSearch无法识别的内容时,我会得到一个"无此类属性"的错误。我也可以执行精确的字符串匹配和任何数值比较,包括大于或小于,但我预计在这些情况下,默认的索引方法将在ElasticSearch上使用。

由于当我尝试运行更高级的ES查询时没有错误,我不知道是什么导致了这里的问题。我可能错过了什么吗?

谢谢,Adam

我不太确定您的代码中出了什么问题。从你的描述来看一切都很好。你能试试下面的脚本吗(只需将其粘贴到你的Gremlin REPL中):

config = new BaseConfiguration()
config.setProperty("storage.backend","inmemory")
config.setProperty("storage.index.elastic.backend","elasticsearch")
config.setProperty("storage.index.elastic.directory","/tmp/es-so")
config.setProperty("storage.index.elastic.client-only","false")
config.setProperty("storage.index.elastic.local-mode","true")
g = TitanFactory.open(config)
g.makeKey("name").dataType(String.class).make()
g.makeKey("property").dataType(String.class).indexed("elastic",Edge.class).make()
g.makeLabel("knows").make()
g.commit()
alice = g.addVertex(["name":"alice"])
bob = g.addVertex(["name":"bob"])
alice.addEdge("knows", bob, ["property":"foo test bar"])
g.commit()
// test queries
g.E.has("property",CONTAINS,"test")
g.query().has("property",CONTAINS,"test").edges()

最后两行应该返回类似e[1t-4-1w][4-knows-8]的内容。如果这样做有效,但您仍然无法找出代码中的错误,那么如果您可以共享完整的代码(例如在Github或Gist中),那就太好了。

干杯,Daniel

相关内容

  • 没有找到相关文章

最新更新