Tinkerpop API在从titan检索数据时不使用混合弹性搜索索引

时间:2016-03-07 03:26:10

标签: indexing titan mixed tinkerpop3

Tinkerpop API在从titan检索数据时不使用混合弹性搜索索引。虽然如果我们直接使用titan API,它确实使用混合弹性搜索索引。

e.g。 我在名字上创建了一个混合索引。

当我们使用tinkerpop API:graph.iterator().V().has("name", "Apple")时, 它没有在" name"上使用混合索引。并提供警告日志'查询需要迭代所有顶点'。

使用titan API,它可以正常工作并使用混合索引" name"如下所示

titanGraph.query().has("name", "Apple").vertices()

这可能是什么原因?

2 个答案:

答案 0 :(得分:2)

这是在TinkerPop mailing list

上交叉发布的

首先,如果您正在进行精确的字符串匹配,那么composite index似乎就可以了。

您应该查看第20章中的Titan docs。索引参数和全文搜索。当您addKey(name)没有映射参数时,String键的混合索引将默认为全文搜索 - addKey(name, Mapping.TEXT.asParameter())。文档中列出了许多要考虑全文搜索的问题:

  • 将字符串标记为一个单词包,允许用户有效地查询包含一个或多个单词的所有匹配项。
  • Titan的默认标记化将字符串拆分为非字母数字字符,并删除少于2个字符的任何标记。
  • 索引后端在图形查询中仅支持全文搜索谓词。 [textContainstextContainsPrefixtextContainsRegex]
  • 全文搜索不区分大小写。

您的查询尝试进行等于比较,因此Mapping.STRINGMapping.TEXTSTRING可能更合适。

我创建了几个要点来比较不同的版本。您可以将这些示例剪切并粘贴到Gremlin控制台中。

Titan 0.5.4 https://gist.github.com/pluradj/ff1e1b1bcea0753adbb1

Titan 1.0.0 https://gist.github.com/pluradj/9bf96f8eae9fa24f3d61

请注意,这种行为在Titan 0.5.4和1.0.0之间没有变化,所以我不确定为什么你的例子以前有效。

答案 1 :(得分:0)

混合ES索引存在问题。在ES中更新/创建数据有延迟。因此,如果创建了一条记录,然后立即通过混合索引键查询,我们就不会将其恢复。请参阅Titan 1.0[Berkeley+ES] - Delayed update of ES index