Как использовать индекс ElasticSearch в запросе Titan Gremlin?

Мне удалось настроить Titan (v0.3.1) с Elastic Search во встроенном режиме, благодаря документам Titan. Тем не менее, мой вопрос сейчас: как мне воспользоваться индексированием ES?

Например, я хотел бы использовать Text.CONTAINS (что поддерживается согласно документам, указанным выше). В частности, я хотел бы получить узлы со строкой "abc" где-то в значении для ключа под названием my_label,

Какой синтаксис позволит достичь этой цели из консоли Gremlin?

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)

Другие вопросы по тегам