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()
这可能是什么原因?
答案 0 :(得分:2)
首先,如果您正在进行精确的字符串匹配,那么composite index似乎就可以了。
您应该查看第20章中的Titan docs。索引参数和全文搜索。当您addKey(name)
没有映射参数时,String键的混合索引将默认为全文搜索 - addKey(name, Mapping.TEXT.asParameter())
。文档中列出了许多要考虑全文搜索的问题:
textContains
,textContainsPrefix
,textContainsRegex
] 您的查询尝试进行等于比较,因此Mapping.STRING
或Mapping.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