【问题标题】:How to use ElasticSearch index in Titan Gremlin query?如何在 Titan Gremlin 查询中使用 ElasticSearch 索引?
【发布时间】:2013-08-12 16:09:43
【问题描述】:

感谢Titan docs,我已经设法在嵌入式模式下使用 Elastic Search 设置 Titan (v0.3.1)。但是,我现在的问题是:如何利用 ES 索引?

例如,我想使用Text.CONTAINS(根据上面链接的文档,这是受支持的)。具体来说,我想在名为my_label 的键的值中某处检索带有字符串"abc" 的节点。

什么语法可以从 Gremlin 控制台实现这个目标?

【问题讨论】:

    标签: gremlin titan


    【解决方案1】:

    搜索外部索引

    以下查询将使用 Elasticsearch 后端:

    g.query().has('my_label',CONTAINS,'abc').edges()

    一般来说,任何包含三个参数的has 查询都将使用您的外部索引后端(Elasticsearch 或 Lucene)。

    以下查询将执行完全匹配:

    g.query().has('my_label','abc').edges()

    将您的属性键放入外部索引

    graph.makeType().name("my_label").dataType(String.class).indexed("elastic", Vertex.class).unique(Direction.OUT).makePropertyKey();
    

    添加 Titan 原生索引和外部索引之间的主要区别在于 indexed(..) 调用中的第二个参数,它指示应在其中索引您的属性的外部索引的名称。

    不幸的是,现在,一旦存在具有某个键的属性,您就无法在该键上添加索引;你必须从一个新的图表开始。

    更多信息

    Titan 文档非常易于阅读: https://github.com/thinkaurelius/titan/wiki/Indexing-Backend-Overview

    奖励: Titan 正在扩展以包括其他类型的部分搜索,包括前缀和正则表达式:https://github.com/thinkaurelius/titan/pull/311

    【讨论】:

    • 谢谢,@jkschneider。很高兴在路上看到新的搜索功能,感谢您对一个伟大项目的贡献。快速跟进:如何将my_label 显式添加到 ES 索引中(或者我是否需要)?我发现一旦使用 my_label 属性创建了一个顶点,您上面提到的 3 参数 has 语法就会返回 Invalid data type for condition: class java.lang.Object
    • 索引将像这样创建(请参阅“索引后端概述”文档页面):graph.makeType().name("my_label").dataType(String.class).indexed("elastic", Vertex.class).unique(Direction.OUT).makePropertyKey(); 不幸的是,现在,一旦存在具有特定键的属性,您就无法在其上添加索引钥匙;你必须从一个新的图表开始。我一直在考虑改变这一点,但您必须想象,动态添加索引会使外部索引在赶上时比正常情况更加不一致。
    • 正是我想要的!再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2016-10-05
    • 2012-10-29
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多