Опрос бэкэнда Titan ElasticSearch через Rexster
У меня есть Titan 0.3.2, работающий во встроенном режиме, и я смог создавать и запрашивать индексы ElasticSearch через оболочку Gremlin ( см. Предыдущий вопрос). Я использую конфигурацию по умолчанию, которая называет индекс ES "поиск".
Эти поиски возвращают правильные узлы без ошибок через оболочку Gremlin:
g.query().has('my_label','abc').vertices()
g.query().has('my_label',CONTAINS,'abc').vertices()
Однако, если я попытаюсь выполнить те же самые запросы Gremlin через RexPro, Rexster отправит обратно эту ошибку для первого запроса выше:
java.util.concurrent.ExecutionException:
javax.script.ScriptException:
javax.script.ScriptException:
java.lang.IllegalArgumentException: Index is unknown or not configured: search
и это для второго:
java.util.concurrent.ExecutionException:
javax.script.ScriptException:
javax.script.ScriptException:
groovy.lang.MissingPropertyException: No such property: CONTAINS for class: Script3
Точно так же, если я пытаюсь сделать запрос по индексируемому ключу через REST API (GET):
http://localhost:8182/graphs/graph/vertices?key=my_key&value=abc
Я получаю такой же ответ об ошибке:
{"message":"Index is unknown or not configured: search","error":"Index is unknown or not configured: search"}
Наконец, если я попытаюсь начать с чистой базы данных и запустить скрипт создания индекса через rexpro:
g.makeType().name("my_label").dataType(String.class).indexed("search", Vertex.class).unique(Direction.OUT).makePropertyKey();
Я вижу ту же неизвестную ошибку индекса:
java.util.concurrent.ExecutionException:
javax.script.ScriptException:
javax.script.ScriptException:
java.lang.IllegalArgumentException: Index is unknown or not configured: search
Таким образом, похоже, что Rexster нужна дополнительная информация о бэкенде индексирования, возможно, в его файле конфигурации (я использую файл по умолчанию, включенный в установку). Кто-нибудь знаком с этой проблемой? Рад предоставить больше информации.
1 ответ
У вас может быть целый ряд вещей, но главное в том, что начиная с Titan 0.3.2, Rexster не импортирует классы Titan автоматически, поэтому вы не можете делать запросы с CONTAINS
, Вам нужно указать полное имя пакета при этом:
com.thinkaurelius.titan.core.attribute.Text.CONTAINS
Я не могу точно сказать, что еще не так, но похоже, что индекс эластичного поиска настроен неправильно. Это не имеет ничего общего с файлом конфигурации Rexster для Titan Server. Это больше связано со вторым аргументом, который вы передаете titan.sh
который содержит информацию о конфигурации Titan. Убедитесь, что эластичный поиск настроен правильно, как в этом файле, показанном здесь (по умолчанию при установке): https://github.com/thinkaurelius/titan/blob/master/config/titan-server-cassandra-es.properties