感谢Titan 文档,我已经设法在嵌入式模式下使用 Elastic Search 设置 Titan (v0.3.1) 。但是,我现在的问题是:如何利用 ES 索引?
例如,我想使用Text.CONTAINS
(根据上面链接的文档,这是受支持的)。具体来说,我想检索带有字符串的节点,该字符串"abc"
位于名为my_label
.
什么语法可以从 Gremlin 控制台实现这个目标?
感谢Titan 文档,我已经设法在嵌入式模式下使用 Elastic Search 设置 Titan (v0.3.1) 。但是,我现在的问题是:如何利用 ES 索引?
例如,我想使用Text.CONTAINS
(根据上面链接的文档,这是受支持的)。具体来说,我想检索带有字符串的节点,该字符串"abc"
位于名为my_label
.
什么语法可以从 Gremlin 控制台实现这个目标?
以下查询将使用 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 )