Запрос серверной части 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 нуждается в некоторой дополнительной информации о серверной части индексирования, возможно, в его файле конфигурации (я использую файл по умолчанию, включенный в установку). Кто-нибудь знаком с этой проблемой? Рад предоставить дополнительную информацию.


person bcm360    schedule 29.08.2013    source источник


Ответы (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

person stephen mallette    schedule 30.08.2013
comment
Степан, еще раз спасибо за помощь. Я надеюсь, что некоторые из этих вопросов будут полезны будущим пользователям Титана. Полностью квалифицированный CONTAINS работал так, как вы описали. Однако мой конфигурационный файл Titan точно соответствует файлу, на который вы ссылаетесь, и ES работает правильно, когда я запрашиваю Titan через оболочку Gremlin. Если проблема не связана с Rexster, почему я вижу Index is unknown or not configured: search при запросе через RexPro, а не через оболочку Gremlin? - person bcm360; 30.08.2013
comment
Я просто имел в виду, что проблема не связана с rexster.xml, который вы загружаете в titan.sh. Вероятно, это связано с созданием вашего индекса или titan-server-cassandra-es.properties файла. Я смог воссоздать эту ошибку, указав titan-server-cassandra.properties вместо titan-server-cassandra-es.properties в моем вызове titan.sh. Когда эластичный поиск не настроен, похоже, вы получите эту ошибку, если попытаетесь использовать средство создания шрифтов для графика. - person stephen mallette; 30.08.2013
comment
Вы абсолютно правы, что возникла проблема с моим пакетным скриптом. Кажется, что Титан неправильно читал файлы конфигурации, которые я ему передал, но оболочка гремлина смогла определить индекс elasticsearch из-за файла конфигурации cassandra-es.local (предоставленного в g = TitanFactory.open("cassandra-es.local")). Еще раз спасибо. - person bcm360; 25.09.2013