Как использовать индекс 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)